Подтвердить что ты не робот

ASP.NET MVC: программно задавать заголовки HTTP на статическом контенте

У меня есть приложение ASP.NET с фильтром, подключенным в RegisterGlobalFilters, который выполняет следующее:

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

Глядя в Fiddler, я вижу, что представления, возвращаемые с веб-сервера, включают этот заголовок. Однако статические файлы, такие как JavaScript, не содержат этот заголовок в ответе HTTP.

Как мне заставить ASP.NET MVC применять этот фильтр к любым статическим файлам, возвращаемым веб-сервером?

4b9b3361

Ответ 1

Один из способов установить заголовки для всего содержимого сайта - 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>

Ответ 2

Это то, что вы хотите по каждому запросу (статические или динамические запросы), вы должны, вероятно, настроить его через IIS (веб-сервер). Вот несколько подробностей о том, как вы можете это сделать - 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>

Если у вас есть доступ непосредственно к IIS, вы также можете использовать пользовательский интерфейс, чтобы установить это.