小编pie*_*eru的帖子

从WebApi尝试GET时无法验证HTTPS连接

我正在使用ASP.Net Core,我有2个项目.

  1. ASP.Net核心MVC应用程序
  2. ASP.Net Core WebApi应用程序

如果我使用Postman尝试其中一个WebApi端点,我没有任何问题,并且/ api/values按预期返回(标准测试端点)

但是,如果我使用MVC应用程序尝试相同的操作,我会得到一个非常令人沮丧的错误:

HttpsConnectionFilter[1]
Failed to authenticate HTTPS connection
Run Code Online (Sandbox Code Playgroud)

我正在使用Kestrel托管Asp.Net核心.

我有一个使用PowerShell创建的自签名PFX证书,这是抛出异常的代码:

var handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.SslProtocols = SslProtocols.Tls12;
handler.ClientCertificates.Add(new X509Certificate2("localcert.pfx", "xxx"));
var client = new HttpClient(handler);

var content = await client.GetStringAsync("https://localhost:44301/api/values");
Run Code Online (Sandbox Code Playgroud)

如果我要运行这个,我会得到同样的错误:

var client = new HttpClient();

var content = await client.GetStringAsync("https://localhost:44301/api/values");
Run Code Online (Sandbox Code Playgroud)

我的Kestrel设置在我的Program.cs中是这样的

var cert = new X509Certificate2("localcert.pfx", "xxx");

var host = new WebHostBuilder()
    .UseKestrel(cfg => cfg.UseHttps(cert))
    .UseUrls("https://localhost:44300")
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseIISIntegration()
    .UseStartup<Startup>()
    .Build();

host.Run();
Run Code Online (Sandbox Code Playgroud)

我知道我为上面的HttpClient再次定义了证书,但我很绝望.

任何人都可以提供一些见解,了解为什么会发生这种情况,以及如何修复它,甚至调试它,因为它让我发疯.我正在浏览并单步执行KestrelHttpServer代码,看看是否会提供一些见解.

这是我从Kestrel控制台窗口获得的完整错误

info:HttpsConnectionFilter 1 无法验证HTTPS连接.System.IO.IOException:身份验证失败,因为远程方已关闭传输流.在System.Net.Security.SslState.StartReadFrame(Byte []缓冲区,Int32 …

c# https asp.net-core-mvc kestrel-http-server asp.net-core

10
推荐指数
1
解决办法
1万
查看次数

无法使用Angular 5客户端启动与信号器核心集线器的连接

我有一个运行SignalR核心集线器的.Net Core 2.0 C#Web Api.我甚至无法启动()我的hubConnection从angular(5.0.1)收到此错误:

选项https:// localhost:44301/hubs/sample 405(方法不允许)

错误:无法启动连接.错误:方法不允许

建立连接时出错:(

XHR加载失败:OPTIONS" https:// localhost:44301/hubs/sample ".

HttpError:XMLHttpRequest.xhr.onload不允许的方法[as __zone_symbol__ON_PROPERTYload](webpack-internal:///../../../../@aspnet/signalr-client/dist/src/HttpClient.js: 30:28)在ZoneDelegate.invokeTask(webpack-internal)的XMLHttpRequest.wrapFn(webpack-internal:///../../../../zone.js/dist/zone.js:1166:39) :///../../../../zone.js/dist/zone.js:425:31)在Object.onInvokeTask(webpack-internal:///../../ .. /core/esm5/core.js:4816:33)在ZoneDelegate.invokeTask(webpack-internal:///../../../../zone.js/dist/zone.js:424:36 )在Zone.runTask(webpack-internal:///../../../../zone.js/dist/zone.js:192:47)的ZoneTask.invokeTask [作为调用](webpack-)内部:///../../../../zone.js/dist/zone.js:499:34)在invokeTask(webpack-internal:///../../../) ../zone.js/dist/zone.js:1540:14)在XMLHttpRequest.globalZoneAwareCallback(webpack-internal:///../../../../zone.js/dist/zone.js :1566:17)

我正在努力甚至调试这个问题,即使在小提琴手的帮助下我也无法解决它.它似乎不是我的Api的问题,因为Kestrel控制台打印出来到集线器的请求进来,但不会打印任何错误.而且我可以毫无问题地获取,发送和发布到我的控制器.

这是我的StartUp.cs配置(我省略了与简洁无关的代码)

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy(
            "CorsPolicy",
            builder =>
                builder
                .AllowAnyOrigin()
                .AllowAnyHeader()
                .AllowAnyMethod()
                .AllowCredentials()
        );
    });

    services.AddAuthentication();
    services.AddMvcCore()
        .AddAuthorization(options => {...});
    services.AddAuthentication("Bearer")
        .AddIdentityServerAuthentication(options => {...});

    services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors("CorsPolicy");
    app.UseAuthentication();

    app.UseSignalR(routes =>
    {
        routes.MapHub<SampleHub>("/hubs/sample");
    });

    app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)

这是我的示例中心

public interface ISampleHubClient 
{
    Task receiveMessage(SampleRequest …
Run Code Online (Sandbox Code Playgroud)

typescript kestrel-http-server asp.net-core-2.0 angular asp.net-core-signalr

6
推荐指数
2
解决办法
7254
查看次数

System.TypeLoadException:方法“ get_xxx”没有实现

关于这个问题有很多问题,我一直很高兴地通过它们解决。

我收到此错误:

程序集“ App.Web,版本= 1.0.0.0,区域性=中性,PublicKeyToken = null”中的类型“ App.Web.WebConfig”中的方法“ get_UserImageCDNUNU”没有实现。

这真的很奇怪,因为我试图运行没有引用App.Web的Api.Web,它们唯一的共同点是引用了其他项目(Models.Domain和Models.DTO)。

我有一个界面:

程序集“ Models.Domain”中的IResourceCompiler

我有一个抽象类,该抽象类在称为WebConfigBase的同一程序集(Models.Domain)中实现此接口。

在“ App.Web”和“ Api.Web”项目中,每个项目都有一个名为WebConfig的类,该类继承自WebConfigBase,因此App和Api中的WebConfig类都是IResourceCompiler的实现。

我试图添加一个属性

string UserImageCDNUrl {get;}
Run Code Online (Sandbox Code Playgroud)

IResourceCompiler并将属性添加到WebConfigBase

public string UserImageCDNUrl 
{
    get { return ""; } 
}
Run Code Online (Sandbox Code Playgroud)

因此,Api和Web项目都可以通过其自己的WebConfig类访问该属性,而我在上面得到了例外。

我已经花了几个小时尝试,看看为什么这种情况没有喜悦。

我已经清除了我的Obj文件夹,进行了清理,重建,检查了GAC中的任何实例(没有实例),但我仍然坚持这样做。

一切正常,直到我尝试向接口(和基类)添加新属性

c# typeloadexception interface

5
推荐指数
2
解决办法
1万
查看次数