2016-01-22 4 views
12

静的コンテンツにプログラムで設定HTTPヘッダー以下行います、私はASP.NET MVC:私はフィルタとASP.NETアプリケーションは<code>RegisterGlobalFilters</code>にアップ配線有する

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

フィドラーに見た図ことがわかりますWebサーバーから返されたものにはこのヘッダーが含まれます。ただし、JavaScriptなどの静的ファイルでは、HTTP応答にこのヘッダーは含まれません。

Webサーバーが返す静的ファイルにもこのフィルタを適用するにはどうすればよいですか?

+1

これはWeb APIフィルタとは関係ありません@ DeblatonJean-Philippe – Tommy

答えて

10

サイトのすべてのコンテンツにヘッダーを設定する方法の1つはweb.configです。 customHeadersセクションでは、このヘッダーがすべてのファイルと応答に含まれていることを確認します。

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

もう1つの方法は、次のようにカスタム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もあります。

関連する問題