C# UseHttpsRedirection是否工作不可靠?
为我的ASP.NET Core Razor Pages应用程序创建的默认启动代码包括以下代码:C# UseHttpsRedirection是否工作不可靠?,c#,asp.net,asp.net-core,razor-pages,C#,Asp.net,Asp.net Core,Razor Pages,为我的ASP.NET Core Razor Pages应用程序创建的默认启动代码包括以下代码: app.UseHttpsRedirection(); 这似乎是偶然的。现在,在我的开发机器上,编辑地址栏中的URL,使其使用HTTP而不是HTTPS,这给了我一个连接重置错误 此外,我还找到了addRedirectToHttpPermanent()选项,该选项可以传递到app.UseRewriter() 此时,我不清楚为什么app.UseHttpsRedirection()似乎不起作用,或者我是否应
app.UseHttpsRedirection();
这似乎是偶然的。现在,在我的开发机器上,编辑地址栏中的URL,使其使用HTTP而不是HTTPS,这给了我一个连接重置错误
此外,我还找到了addRedirectToHttpPermanent()
选项,该选项可以传递到app.UseRewriter()
此时,我不清楚为什么app.UseHttpsRedirection()
似乎不起作用,或者我是否应该使用UseRewriter()
有人知道了吗?TL;博士:
重定向按预期工作HTTP
和HTTPS
使用不同的端口
仅从url中删除s
:https://localhost:44336,您正在尝试对需要HTTPS
的应用程序端口执行HTTP
,该端口不受支持。要使重定向生效,您需要使用HTTP
与HTTP
端口联系
使用指定的HTTP
url,http://localhost:53640
,您将看到应用程序按预期重定向
在我的示例中,请参见launchSettings.json
它的定义如下:
"applicationUrl": "http://localhost:53640"
所以这里发生的事情如下: 一般来说
- “HTTPS端口”*,只接受HTTPS(,因此不接受HTTP)连接
- “HTTP端口”*,只接受HTTP(,因此不接受HTTPS)连接
UseHttpsRedirection
将HTTP端口上的入站HTTP流量路由到HTTPS端口上的HTTPS流量
如果浏览器中的URL未指定端口号,则默认为协议通常使用的端口。HTTP为端口80,HTTPS为端口443
调试器案例
为了防止端口冲突,VisualStudio默认使用非标准端口进行调试。您可以在“launchSettings.json”文件中看到它们
我的看起来像这样:
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:53640",
"sslPort": 44336
}
},
注意2个端口号。重定向仅在指定端口(和到指定端口)工作
在53640接受HTTP,在44336接受HTTPS
您的用例
通过更改删除URL栏中的s
,您正在更改:
https://localhost:44336
到
http://localhost:44336
注意,由于您没有调整端口,因此尝试在HTTPS端口上连接HTTP。此方案不在重定向范围内,将失败
仅<代码>http://localhost:53640将重定向到https://localhost:44336
。只是HTTP:http://localhost:44336
将导致连接重置
生产服务器案例
在正常情况下,您可以使用默认端口(80用于HTTP,443用于HTTPS,带有适当的证书)将应用程序发布到Web服务器
由于用户使用的浏览器也使用这些默认端口,因此重定向效果良好,因为:
将实际转换为和
将转化为
因此,这将神奇地实现:
将重定向到
浏览器只是不显示端口号。
要查找launchSettings.json
文件:VS中的文件:
或者 如果这没有帮助,可能是
app.Use…
的顺序错误
基本上,它是注册中间件的扩展。订单很重要
通常,最初配置重定向,然后配置MVC。像这样:
app.UseHttpsRedirection();
app.UseMvc();
app.UseOtherMiddleWare();
如果您颠倒顺序,可能会在管道的前面遇到一个错误,并且重定向不会执行。TL;博士:
重定向按预期工作HTTP
和HTTPS
使用不同的端口
仅从url中删除s
:https://localhost:44336,您正在尝试对需要HTTPS
的应用程序端口执行HTTP
,该端口不受支持。要使重定向生效,您需要使用HTTP
与HTTP
端口联系
使用指定的HTTP
url,http://localhost:53640
,您将看到应用程序按预期重定向
在我的示例中,请参见launchSettings.json
它的定义如下:
"applicationUrl": "http://localhost:53640"
所以这里发生的事情如下: 一般来说
- “HTTPS端口”*,只接受HTTPS(,因此不接受HTTP)连接
- “HTTP端口”*,只接受HTTP(,因此不接受HTTPS)连接
UseHttpsRedirection
将HTTP端口上的入站HTTP流量路由到HTTPS端口上的HTTPS流量
如果浏览器中的URL未指定端口号,则默认为协议通常使用的端口。HTTP为端口80,HTTPS为端口443
调试器案例
为了防止端口冲突,VisualStudio默认使用非标准端口进行调试。您可以在“launchSettings.json”文件中看到它们
我的看起来像这样:
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:53640",
"sslPort": 44336
}
},
注意2个端口号。重定向仅在指定端口(和到指定端口)工作
在53640接受HTTP,在44336接受HTTPS
您的用例
通过更改删除URL栏中的s
,您正在更改:
https://localhost:44336
到
http://localhost:44336
注意,由于您没有调整端口,因此尝试在HTTPS端口上连接HTTP。此方案不在重定向范围内,将失败
仅<代码>http://localhost:53640将重定向到https://localhost:44336
。只是HTTP:http://localhost:44336
将导致连接重置
生产服务器案例
在正常情况下,使用默认端口(80用于HTTP,443用于HTTPS,wi)将应用程序发布到Web服务器