.NET 添加 header 以响应 index.html 请求?

.NET Add header to response on index.html request?

我有一个名为 Mensajes.Cliente 的 WebAPI 项目,其中包含一个 Angular 应用程序:

出于安全原因,我需要在每个服务器响应中添加 2 headers。解决了将以下内容添加到 Global.asax:

protected void Application_BeginRequest()
{
    Response.AddHeader("X-Frame-Options", "DENY");
    Response.AddHeader("X-XSS-Protection", "1");
}

当我调用任何控制器方法时,响应确实包含两个 header,因此可以正常工作。

但是当我尝试将 index.html 设置为 foo.com/Mensajes.Clientefoo.com/Mensajes.Cliente/index.html 时,没有设置 header(它发生在所有静态内容为 .js 或.css 个文件)。

如何将这些 header 添加到 每个 服务器请求的响应中?

这些 header 必须在 web.config 或 Global.asax 配置中设置,还是在服务器配置中设置?

  1. 为站点的所有内容设置 header 的最简单方法是在 web.config 中。 system.webServerhttpProtocol 下的 customHeaders 部分将确保此 header 包含在所有文件和响应中。

示例:

<system.webServer>
   <!--.......-->
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="DENY" />
        <add name="X-XSS-Protection" value="1" />
      </customHeaders>
    </httpProtocol>    
    <!--.......-->
</system.webServer>
  1. 另一种选择是创建自定义 HttpModule。这样您就可以更好地控制需要附加 headers 的文件和内容。

示例:

public class CustomOrgHeaderModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    }

    public void Dispose() { }

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
        //To add header only for Html files
       //You can add any condition as you need
        if (HttpContext.Current.Request.Url.ToString().Contains(".html"))//css, js as you need
        {
            HttpContext.Current.Response.Headers.Add("X-Frame-Options", "DENY");
            HttpContext.Current.Response.Headers.Add("X-XSS-Protection", "1");
        }
    }
}

并在web.config-

中注册CustomOrgHeaderModule
   <system.webServer>
       <!--.......-->
        <modules>
         <add name="CustomHeaderModule" type="SOFTEST.NET.API.Modules.CustomOrgHeaderModule" /><!--.SOFTEST.NET.API.Modules.CustomOrgHeaderModule is then FullNmae of the class MEANS Namesapce.CassName -->
       </modules>  
        <!--.......-->
    </system.webServer>

并且您不再需要在 Global.asax 中设置 Response.AddHeader