无法使用 HTTPS 启动 ASP.NET Core
Posted
技术标签:
【中文标题】无法使用 HTTPS 启动 ASP.NET Core【英文标题】:Unable to start ASP.NET Core with HTTPS 【发布时间】:2017-11-22 01:41:33 【问题描述】:我有一个 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 命令检查端口时,它显示:
邮递员说:
应用程序中操作方法的调试器都没有被命中。
附: : 当我恢复对 HTTPS 的更改并尝试使用 HTTP 时,它工作正常。
http的main方法有不同的端口,上面提到的配置都没有变化。
【问题讨论】:
为清晰的描述投票! 我认为您需要在某处配置应该使用哪个证书。 当我将 Web API 应用程序作为启动项目运行时,它可以正常工作并且不需要证书。从某个 WPF 应用程序内部启动时是否需要一个? 【参考方案1】:当您在 Web 服务器设置中启用 SSL 时,您为 IIS 而不是您的应用程序启用 SSL。当您从 Visual Studio 启动 Web API 时,它作为反向代理服务在 IIS 后面运行。这就是为什么只有在将 SSL 作为启动项目运行时才能获得 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();
【讨论】:
我花了一些时间来生成一个 .pfx 并在浏览器上为 Postman 配置它。但立即工作!谢谢!如果我愿意,有没有办法通过这个设置(从 WPF 内部)使用 IIS? 是的,你可以。您需要从 WPF 应用程序启动 IIS 并将其配置为侦听端口 44300(或您分配给它的任何端口)并启用 SSL。怎么做,超出了我的认知。祝你好运。以上是关于无法使用 HTTPS 启动 ASP.NET Core的主要内容,如果未能解决你的问题,请参考以下文章
无法启动 ASP.NET 开发服务器,因为端口“1900”正在使用中
为啥 ASP.NET web api 3 项目在 ASP.NET web api 2 执行时没有请求就无法启动?
无法调试在 Docker 中运行的 ASP.NET 网站中的启动代码