我有一个WPF应用程序,它启动了一个ASP.NET核心WEB API应用程序。
当我使用这些配置启动WEB API项目作为启动项目时,它适用于HTTPS。 但是,当我尝试从WPF环境启动此应用程序时,它不适用于HTTPS。
配置:
- Web API配置:
醇>
- 在Startup.cs文件中:
醇>
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
}
Main方法如下所示:
public static void InitHttpServer()
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseUrls("https://localhost:44300/")
//.UseApplicationInsights()
.Build();
host.Run();
}
当我使用netstat命令检查端口时,它显示:
邮递员说:
应用程序中的操作方法的调试器都没有被命中。
P.S。 : 当我还原HTTPS的更改并尝试使用HTTP时,它可以正常工作。
HTTP的主要方法有不同的端口,没有上面提到的配置更改。
答案 0 :(得分:2)
在Web服务器设置中启用SSL时,为IIS启用SSL而不是您的应用程序。当您从Visual Studio启动Web API时,它在IIS后面作为反向代理服务运行。这就是为什么只有在将其作为启动项目运行时才获得SSL。当您从WPF应用程序运行它时,API仅在Kestrel上运行。
因此,要在Kestrel上启用SSL,您需要添加一个证书,然后在设置Kestrel时将其传入。
var cert = new X509Certificate2("YourCert.pfx", "password");
var host = new WebHostBuilder()
.UseKestrel(cfg => cfg.UseHttps(cert))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseUrls("https://localhost:44300/")
//.UseApplicationInsights()
.Build();