ASP.NET MVC框架项目自动从HTTP重定向到HTTPS却未找到重定向配置,调试时出现连接错误求助
ASP.NET MVC框架项目自动从HTTP重定向到HTTPS却未找到重定向配置,调试时出现连接错误求助
这种莫名的自动重定向还报错的情况确实挺闹心的,我之前维护老项目时也碰到过类似问题,给你梳理几个常见的排查方向,你挨个试试:
检查IIS Express的隐藏配置文件
调试用的IIS Express有个隐藏的配置目录.vs(在项目根目录下,需要显示隐藏文件才能看到),里面的config\applicationhost.config文件可能悄悄做了强制HTTPS的设置。打开这个文件,搜索你的项目名称,重点看:<bindings>节点里是否同时存在HTTP和HTTPS绑定,有没有被强制设置成仅HTTPS?- 有没有
<rewrite>规则偷偷加了HTTP转HTTPS的配置? - 节点里的
<sslFlags>是不是被设置成了Ssl或SslNegotiateCert这类强制SSL的参数?
核对项目调试属性的细节
除了你提到的Web标签页HTTP设置,别忘了看Debug标签页:- 检查“启动浏览器”的地址是不是不小心填成了HTTPS的链接?
- 有没有勾选“启用SSL”选项?VS有时候会自动给项目开启SSL支持,哪怕你没在Web标签页设置,这个选项勾上的话,启动时就会强制用HTTPS,要是本地SSL证书有问题就会报连接错误。
排查全局/Action过滤器
ASP.NET MVC的过滤器很容易藏这种“隐形”重定向:- 打开
App_Start\FilterConfig.cs,看看有没有注册filters.Add(new RequireHttpsAttribute());——这个全局过滤器会强制所有请求跳HTTPS。 - 逐个检查控制器或Action方法,有没有单独加
[RequireHttps]特性,说不定之前的开发者加在某个你没注意的地方。
- 打开
再仔细检查Web.config及转换文件
你说已经搜过了,但可以再确认这几点:- 主Web.config的
<system.webServer>节点下有没有<rewrite>规则,比如下面这种HTTP转HTTPS的配置:<rewrite> <rules> <rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> </rule> </rules> </rewrite> - 看看Web.config的转换文件(比如
Web.Release.config)有没有这类重定向规则,要是你调试时不小心选了Release配置,转换后的规则也会生效。
- 主Web.config的
排除浏览器缓存干扰
有时候浏览器会记住之前的HTTPS重定向缓存,哪怕服务器端没配置也会自动跳转。你可以用Edge的隐私模式打开调试,或者清除浏览器的缓存、Cookie后再试试,说不定就不再自动跳了。检查本地工具的强制HTTPS设置
比如杀毒软件、防火墙,或者像Fiddler这类代理工具,有些会强制把本地HTTP请求转成HTTPS,导致连接出错。可以暂时关闭这些工具,再启动调试看看情况。
备注:内容来源于stack exchange,提问作者eliassal
相关产品推荐
相关产品推荐

