2016-01-22 197 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也可以設置它。