ASP.NET MVC:以编程方式在静态内容上设置HTTP标头

我有一个ASP.NET应用程序,在RegisterGlobalFilters中连接了一个filter,它执行以下操作:

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

查看Fiddler,我可以看到从Web服务器返回的视图包含此标题。 但是,静态文件(例如JavaScript)不会在HTTP响应中包含此标头。

如何让ASP.NET MVC也将此filter应用于Web服务器返回的任何静态文件?

为网站的所有内容设置标头的一种方法是在web.configcustomHeaders部分将确保包含所有文件和响应的标头。

         

另一种选择是创建自定义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注册它们,如下所示 –

       

如果您想要每个请求(静态或动态请求),您应该通过IIS(Web服务器)进行设置。 以下是有关您可以实现此目标的不同方法的一些详细信息 – http://www.iis.net/configreference/system.webserver/httpprotocol/customheaders

简而言之,您可以在web.config文件中执行此操作

          

如果您可以直接访问IIS,则可以使用UI进行设置。