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

如何在web.config中为自定义Header设置条件添加及例外规则?

在web.config中实现自定义Header的条件添加(含例外规则)

直接在<customHeaders>节点里写if逻辑是行不通的,但可以借助IIS URL Rewrite模块实现条件化添加Header,完美匹配你的需求:既给静态资源和大部分页面加上X-Frame-Options:SAMEORIGIN,又能让指定控制器页面跳过这个Header。

步骤1:修改web.config,替换原固定Header配置

先删掉原来<httpProtocol>里的X-Frame-Options固定添加规则,换成URL Rewrite的条件化配置:

<system.webServer>
  <!-- 移除原固定Header配置 -->
  <httpProtocol>
    <customHeaders>
      <!-- 不再直接添加X-Frame-Options -->
    </customHeaders>
  </httpProtocol>

  <!-- 添加URL Rewrite规则 -->
  <rewrite>
    <outboundRules>
      <!-- 规则1:无allowembedding头时,添加X-Frame-Options -->
      <rule name="Add X-Frame-Options unless allowed" enabled="true">
        <match serverVariable="RESPONSE_X-Frame-Options" pattern=".*" negate="true" />
        <conditions>
          <add input="{RESPONSE_allowembedding}" pattern="true" negate="true" />
        </conditions>
        <action type="Rewrite" value="SAMEORIGIN" />
      </rule>

      <!-- 规则2:移除临时的allowembedding头,避免返回给客户端 -->
      <rule name="Remove allowembedding header" enabled="true">
        <match serverVariable="RESPONSE_allowembedding" pattern=".*" />
        <action type="Rewrite" value="" />
      </rule>
    </outboundRules>
  </rewrite>
</system.webServer>

步骤2:在控制器中标记例外页面

在需要跳过X-Frame-Options的Action里,添加临时的allowembedding头:

public ActionResult AllowEmbeddedPage()
{
    // 添加临时头,告知Rewrite规则跳过X-Frame-Options添加
    Response.Headers.Add("allowembedding", "true");
    return View();
}

关键说明

  • 确保你的IIS服务器已安装URL Rewrite模块(可通过IIS管理器的「模块」查看,未安装可直接从微软官方渠道下载安装)。
  • 方案优势:
    • 静态资源(HTML、JS、图片等)默认自动带上X-Frame-Options,无需额外处理。
    • 仅标记了allowembedding的控制器页面会跳过该Header,逻辑集中在web.config,无需改动大量控制器代码。
    • 临时的allowembedding头会被Rewrite规则移除,不会暴露给前端客户端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:03:23