GZipping content files in ASP.NET MVC 3

本文关键字:NET MVC ASP in content files GZipping | 更新日期: 2023-09-27 18:24:00

我使用以下属性来装饰我的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文件夹中的文件使用控制器,或者以某种方式绑定或被允许将这些过滤器附加到响应标头的东西钩住。

GZipping content files in ASP.NET MVC 3

您可以在IIS中激活压缩,而不是编写这样的操作过滤器和重新设计轮子。您可以对静态和动态内容执行此操作。