You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC与WebForms跨系统HTTPS路由异常求助

解决Azure上WebForms系统HTTPS自动跳回HTTP的问题

看起来你的问题核心是Azure App Service的反向代理导致WebForms无法正确识别HTTPS请求,再加上路由重写逻辑没适配这种场景,才出现了跳回HTTP或者无限循环的情况。我给你一步步拆解解决方案:

1. 让WebForms识别Azure的HTTPS转发头

Azure的前端负载均衡器会把原始请求的协议放在X-Forwarded-Proto头里,但WebForms默认不会读取这个头,导致Request.IsSecureConnection返回false,系统误以为当前是HTTP请求,进而跳回HTTP。

在Web.config的<system.webServer>节点下添加以下重写规则,让应用信任这个转发头:

<rewrite>
  <rules>
    <!-- 识别Azure的HTTPS转发头,设置服务器变量 -->
    <rule name="Trust Forwarded Proto" stopProcessing="false">
      <match url=".*" />
      <conditions>
        <add input="{HTTP_X_FORWARDED_PROTO}" pattern="https" />
      </conditions>
      <serverVariables>
        <set name="HTTPS" value="on" />
        <set name="SERVER_PORT_SECURE" value="1" />
      </serverVariables>
    </rule>
  </rules>
</rewrite>

2. 添加安全的HTTPS强制重定向规则

之前强制HTTPS导致无限循环,是因为应用没识别到真实的HTTPS请求,不断触发重定向。现在有了上面的规则,我们可以添加正确的强制HTTPS规则,避免循环:
在刚才的<rewrite><rules>里继续添加:

<!-- 强制所有HTTP请求重定向到HTTPS -->
<rule name="Force HTTPS" enabled="true" stopProcessing="true">
  <match url="(.*)" />
  <conditions>
    <!-- 基于原始请求的协议判断,而不是应用内部的协议 -->
    <add input="{HTTP_X_FORWARDED_PROTO}" pattern="http" />
  </conditions>
  <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>

3. 修正RouteHandler中的重写逻辑

你的RouteHandler里用了HttpContext.Current.RewritePath,虽然这个方法主要处理路径部分,但要确保重写时不会破坏协议上下文。可以做两个小调整:

  • 现在应用已经能正确识别HTTPS,Request.IsSecureConnection会返回真实值,重写路径时无需额外修改协议
  • 避免硬编码任何HTTP/HTTPS链接,依赖系统的自动协议识别

修改后的RouteHandler相关代码片段:

if (!requestContext.RouteData.Values.ContainsKey("email"))
{
    string queryString = "?" + PageQueryString;
    if (queryString != "?")
    {
        // 直接重写路径,协议由当前请求上下文维护
        HttpContext.Current.RewritePath(string.Concat(PageVirtualPath, queryString));
    }
}

4. 额外检查项

  • 如果用了Forms认证,在Web.config的<authentication>节点里开启requireSSL:
    <authentication mode="Forms">
      <forms loginUrl="~/Login.aspx" requireSSL="true" />
    </authentication>
    
  • 确认Azure App Service的SSL设置里已经开启了“HTTPS Only”选项(在Azure门户的应用服务→TLS/SSL设置里)
  • 检查Global.asax的路由配置,确保没有硬编码HTTP的路由模板或链接

按照这些步骤配置后,你的WebForms系统应该能稳定使用HTTPS,不会再跳回HTTP,也不会出现无限循环的问题。

内容的提问来源于stack exchange,提问作者Mari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 13:47:54