2016-01-22 218 views
12

我有一个过滤器ASP.NET应用程序中RegisterGlobalFilters有线了编程设置HTTP标头执行以下操作:ASP.NET MVC:静态内容

public class XFrameOptionsAttribute : ActionFilterAttribute 
{ 
    public override void OnResultExecuting(System.Web.Mvc.ResultExecutingContext filterContext) 
    { 
     filterContext.HttpContext.Response.AddHeader("X-FRAME-OPTIONS", "SAMEORIGIN"); 
    } 
} 

展望提琴手,我看到的看法从Web服务器返回包含此标头。但是,静态文件(如JavaScript)不会在HTTP响应中包含此头文件。

如何让ASP.NET MVC也将此过滤器应用于Web服务器返回的任何静态文件?

+1

这与Web API过滤器无关@ DeblatonJean-Philippe – Tommy

回答

10

为网站的所有内容设置标题的一种方法是在web.configcustomHeaders部分将确保包含所有文件和响应的头文件。

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="X-FRAME-OPTIONS" value="SAMEORIGIN" /> 
     </customHeaders> 
    </httpProtocol> 
    </system.webServer> 

另一种选择是创建自定义HttpModule,如下所示。通过这种方式,您可以更好地控制需要添加标题的文件和内容。

namespace MvcApplication1.Modules 
{ 
    public class CustomOriginHeader : IHttpModule 
    { 
     public void Init(HttpApplication context) 
     { 
      context.PreSendRequestHeaders += OnPreSendRequestHeaders; 
     } 

     public void Dispose() { } 

     void OnPreSendRequestHeaders(object sender, EventArgs e) 
     { 
      // For example - To add header only for JS files 
      if (HttpContext.Current.Request.Url.ToString().Contains(".js")) 
      { 
       HttpContext.Current.Response.Headers.Add("X-FRAME-OPTIONS", "SAMEORIGIN"); 
      } 
     } 
    } 
} 

,然后注册他们web.config如下 -

<system.webServer> 
    <modules> 
     <add name="CustomHeaderModule" type="MvcApplication1.Modules.CustomOriginHeader" /> 
    </modules> 
    </system.webServer> 
+1

我曾考虑过这样做,但如果我有一个场景,我想为特定*静态文件添加特定标头。 – codechurn

+1

我还用程序化的方式更新了我的答案,以添加标题,查看它。 – ramiramilu

4

这是,如果你想在每次请求(静态或动态的请求)的东西,你应该设置它通过IIS( Web服务器)。这里有不同的方式,你可以做到这一点的一些细节 - http://www.iis.net/configreference/system.webserver/httpprotocol/customheaders

总之,如果你有直接到IIS访问你可以这样做在你的web.config文件

<configuration> 
    <system.webServer> 
     <httpProtocol> 
     <customHeaders> 
      <add name="X-Custom-Name" value="MyCustomValue" /> 
     </customHeaders> 
     </httpProtocol> 
    </system.webServer> 
</configuration> 

,您可以使用UI也可以设置它。