2016-01-22 8 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"); 
    } 
} 

फ़िडलर में देख रहे हैं, मुझे लगता है कि दृश्य देख सकते हैं वेबसर्वर से लौटाया गया यह हेडर शामिल है। हालाँकि स्टेटिक फाइलें, जैसे जावास्क्रिप्ट में इस हेडर को HTTP प्रतिक्रिया में शामिल नहीं किया गया है।

मैं इस फ़िल्टर को वेब सर्वर लौटने वाली किसी भी स्थिर फाइल पर भी लागू करने के लिए एएसपी.नेट एमवीसी कैसे प्राप्त करूं?

+1

इसका वेब एपीआई फ़िल्टर @ डीब्लैटन जेन-फिलिप – Tommy

उत्तर

10

साइट की सभी सामग्री के लिए शीर्षलेख सेट करने का एक तरीका web.config में है। customHeaders अनुभाग यह सुनिश्चित करेगा कि यह शीर्षलेख सभी फ़ाइलों और प्रतिक्रियाओं के लिए शामिल है।

<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

यह कुछ ऐसा है, तो आप हर अनुरोध (स्थिर या गतिशील अनुरोध) पर चाहते है, तो आप शायद यह निर्धारित करना चाहिए आईआईएस के माध्यम से ऊपर (वेब सर्वर)। यहां विभिन्न तरीके हैं जिनसे आप इस लक्ष्य को हासिल कर सकते हैं पर कुछ विवरण हैं - http://www.iis.net/configreference/system.webserver/httpprotocol/customheaders

संक्षेप में, आप सीधे आईआईएस के लिए उपयोग किया है तो आप अपनी web.config फ़ाइल

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

में ऐसा कर सकता है, तो आप उपयोग कर सकते हैं यूआई को भी सेट अप करने के लिए।