AddRedirectToHttps()不会重定向到Https

时间:2017-06-14 19:21:47

标签: c# ssl asp.net-core

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

2 个答案:

答案 0 :(得分:1)

正如github post确认的那样,我认为可能是造成问题的端口。 (基本上,您无法在同一端口上侦听httphttps请求。)

对我的修复实际上是三倍:

首先,您需要注意在开发中运行应用程序的方式。在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());
    }

     ....
}