在ASP.NET MVC 3中GZipping内容文件

我使用以下属性来装饰我的BaseController类。

 public class OutputCompressAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { string encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"]; if (string.IsNullOrEmpty(encodingsAccepted)) return; encodingsAccepted = encodingsAccepted.ToLowerInvariant(); HttpResponseBase response = filterContext.HttpContext.Response; if (encodingsAccepted.Contains("gzip")) { response.AppendHeader("Content-encoding", "gzip"); response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); } else if (encodingsAccepted.Contains("deflate")) { response.AppendHeader("Content-encoding", "deflate"); response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); } } } 

问题是,即使这对于视图和每个操作结果都很好,该属性也不适用于项目的/Content文件夹中的/Content 。 我想知道如何使它能够使Content文件夹中的文件使用控制器,或以某种方式绑定或挂钩允许我将这些filter附加到响应头的东西。

您可以在IIS中激活压缩 ,而不是编写此类操作filter并重新发明轮子。 您可以为静态和动态内容执行此操作。