2016-01-22 11 views
12

Mam aplikacji ASP.NET z filtrem przewodowy w RegisterGlobalFilters który wykonuje następujące czynności:ASP.NET MVC: Programowo ustawione nagłówki HTTP na statyczny

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

Patrząc w Skrzypek, widzę, że widoki zwrócone z serwera sieciowego zawierają ten nagłówek. Jednak pliki statyczne, takie jak JavaScript, nie zawierają tego nagłówka w odpowiedzi HTTP.

Jak uzyskać ASP.NET MVC, aby zastosować ten filtr do plików statycznych zwracanych przez serwer WWW?

+1

To nie ma nic wspólnego z filtrami web API @ DeblatonJean-Philippe – Tommy

Odpowiedz

10

Jednym ze sposobów ustawienia nagłówków dla całej treści witryny jest web.config. Sekcja customHeaders zapewni, że ten nagłówek zostanie dołączony do wszystkich plików i odpowiedzi.

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

Inną opcją jest utworzenie niestandardowego HttpModule, jak pokazano poniżej. W ten sposób masz większą kontrolę nad plikami i zawartością, do których należy dołączyć nagłówki.

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"); 
      } 
     } 
    } 
} 

A następnie zarejestrować je w web.config jak pokazano poniżej -

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

Myślałem o tym, ale co jeśli mam scenariusz, w którym chcę dodać konkretny nagłówek tylko * pewnych * statycznych plików. – codechurn

+1

Zaktualizowałem również moją odpowiedź za pomocą programowego sposobu dodawania nagłówków, sprawdź to. – ramiramilu

4

To jest coś, że jeśli chcesz na każde żądanie (na życzenie, statyczne lub dynamiczne), powinieneś ustawić go za pośrednictwem IIS (serwer internetowy). Oto kilka szczegółów na temat różnych sposobów, że można to osiągnąć - http://www.iis.net/configreference/system.webserver/httpprotocol/customheaders

W skrócie, można zrobić to w pliku web.config

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

Jeśli masz dostęp bezpośrednio do IIS, można użyć UI również to ustawić.

Powiązane problemy