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

Azure HTTPS重定向扩展下,IIS重定向致HttpContext.Request.ContentType为空求解决

解决Azure HTTPS重定向站点扩展导致ContentType为空的问题

我完全懂你的处境——用Azure自带的HTTPS重定向站点扩展(靠applicationhost.xdt配置实现)做HTTP到HTTPS的跳转,结果用Postman发请求触发重定向后,HttpContext.Request.ContentType居然是空的,而且你更想保留IIS层面的重定向逻辑,不想换成.NET Core常用的中间件方案。

问题根源

默认的IIS重定向(尤其是站点扩展自带的规则)在处理带请求体的请求时,往往不会完整保留原始请求的ContentType头部。这是因为重定向过程中,IIS默认可能没有显式传递这类请求头,导致后端的.NET Core应用接收到的请求丢失了这个关键信息。

解决方案:修改applicationhost.xdt配置

答案是肯定的,你可以通过调整applicationhost.xdt的规则,强制IIS在重定向时保留ContentType头部。下面是具体的配置示例:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <rewrite>
      <!-- 替换现有HTTPS重定向规则,添加头部保留配置 -->
      <rules>
        <rule name="HTTPS Redirect" stopProcessing="true" xdt:Transform="Replace" xdt:Locator="Match(name)">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="off" ignoreCase="true" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
          <!-- 显式保留Content-Type服务器变量 -->
          <serverVariables>
            <set name="HTTP_CONTENT_TYPE" value="{HTTP_CONTENT_TYPE}" xdt:Transform="InsertIfMissing" />
          </serverVariables>
        </rule>
      </rules>

      <!-- 添加出站规则,确保重定向响应时保留头部 -->
      <outboundRules xdt:Transform="InsertIfMissing">
        <rule name="Preserve Content-Type Header" preCondition="IsRedirect">
          <match serverVariable="RESPONSE_LOCATION" pattern=".*" />
          <action type="Rewrite" value="{R:0}" />
          <serverVariables>
            <set name="HTTP_CONTENT_TYPE" value="{HTTP_CONTENT_TYPE}" />
          </serverVariables>
        </rule>
        <preConditions>
          <preCondition name="IsRedirect" xdt:Transform="InsertIfMissing">
            <add input="{RESPONSE_STATUS}" pattern="3.*" />
          </preCondition>
        </preConditions>
      </outboundRules>
    </rewrite>
  </system.webServer>
</configuration>

配置说明

  • 这个XDT变换会替换你现有的HTTPS重定向规则,新增serverVariables节点来强制保留HTTP_CONTENT_TYPE变量,确保重定向过程中该头部被传递到后端应用。
  • 出站规则部分则针对所有3xx重定向响应,进一步加固头部的保留逻辑,避免在响应阶段丢失信息。

验证步骤

  1. 把修改后的applicationhost.xdt上传到Azure站点的site根目录(可以通过Azure门户的「高级工具」→ Kudu → 站点文件管理器操作)。
  2. 重启你的Azure站点,让XDT配置生效。
  3. 再次用Postman发送带ContentType的HTTP请求,触发重定向后检查HttpContext.Request.ContentType是否能正常获取到值。

额外注意点

  • 如果你的请求是POST类型,默认301/302重定向会把请求方法转为GET。如果需要保留POST方法,你可以把重定向规则的action部分改成:
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Temporary" statusCode="307" />
    
    307状态码会要求客户端重复原始的POST请求,不过需要确保Postman支持这种重定向行为。
  • 确认你的Azure站点允许修改服务器变量,部分场景下需要在IIS相关配置中开启权限(可以通过Azure门户的「配置」→「常规设置」检查)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:12:29