我正在使用ASP.Net Core,我有2个项目.
如果我使用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 …
我有一个运行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
关于这个问题有很多问题,我一直很高兴地通过它们解决。
我收到此错误:
程序集“ 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中的任何实例(没有实例),但我仍然坚持这样做。
一切正常,直到我尝试向接口(和基类)添加新属性