MSDN上的Enforcing SSL in a ASP.NET Core App指南告诉我将以下代码添加到Configure
类中的Startup
方法,以便将所有http
请求重定向到{ {1}}:
https
将代码添加到正确的位置,并在调试模式下测试http请求后,我在chrome中遇到var options = new RewriteOptions()
.AddRedirectToHttps();
app.UseRewriter(options);
错误:
connection reset
我正在尝试访问相同的URL(包括端口..我认为我可能会出错的地方?)如果我使用https ... IE,我会输入{{1}而不是This site can’t be reached
The connection was reset.
Try:
Checking the connection
Checking the proxy and the firewall
Running Windows Network Diagnostics
ERR_CONNECTION_RESET
进入我的地址栏。
我的http://localhost:44376
方法的精简版本如下所示:
https://localhost:44376
答案 0 :(得分:1)
正如github post确认的那样,我认为可能是造成问题的端口。 (基本上,您无法在同一端口上侦听http
和https
请求。)
对我的修复实际上是三倍:
首先,您需要注意在开发中运行应用程序的方式。在Windows上运行visual studio时,默认是使用IIS / IIS Express启动。这会导致问题,因为它使用项目设置中定义的应用程序URL,而不是我们尝试通过启动类传递给kestrel的URL。 (它是applicationUrl
的{{1}}部分中定义的iisSettings
如果展开Visual Studio中launchSettings.json
按钮的下拉列表,您应该看到一个带有项目名称的选项,这将通过dotnet CLI使用start
启动您的应用程序。
其次,您需要定义两个用于要监听的茶隼的网址,一个用于Kestrel
,另一个用于http
。这是通过简单地将两个网址传递到https
中的UseUrls()
方法的不同端口来完成的:
main()
最后,如果您不使用默认的https端口(443),则需要指定您希望kestrel重定向var host = new WebHostBuilder()
.UseKestrel(options => {
options.UseHttps(certFile, certPass);
})
.UseContentRoot(Directory.GetCurrentDirectory())
.UseUrls("https://*:44388", "http://*:8080")
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
请求的端口。要做到这一点,只需通过传递http
和想要重定向的端口来重载AddRedirectToHttps()
方法。我已使用状态代码status code
永久重定向到301
。
https
答案 1 :(得分:1)
我在使用.AddRedirectToHttps()
方面遇到了类似的问题。但我发现它可能没有正确地将端口设置为默认的SSL端口443。
使用AddRedirectToHttpsPermanent()
代替!,因为它会将端口默认为443。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Redirects all HTTP requests to HTTPS
if (env.IsProduction())
{
app.UseRewriter(new RewriteOptions()
.AddRedirectToHttpsPermanent());
}
....
}