【问题标题】:GZip or Deflate compression for asp.net mvc 2 without access to server config用于 asp.net mvc 2 的 GZip 或 Deflate 压缩,无需访问服务器配置
【发布时间】:2011-08-02 07:46:10
【问题描述】:

我尝试使用这里描述的方法ASP.NET MVC Action Filter - Caching and Compression 。起初结果令人鼓舞,因为服务器确实开始发送 GZip 编码文件,但经过进一步测试,有时在具有 Html.RenderAction 部分的页面中,该属性将被调用两次 gzip 压缩已压缩的页面。 有谁知道使用 ASP.NET MVC 2 提供更稳定的压缩页面的方法,或者知道如何修改代码以使其更通用?

public class CompressFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(FilterExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;
        string acceptEncoding = request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(acceptEncoding)) return;
        acceptEncoding = acceptEncoding.ToUpperInvariant();
        HttpResponseBase response = filterContext.HttpContext.Response;
        if (acceptEncoding.Contains("GZIP"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
        else if (acceptEncoding.Contains("DEFLATE"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
    }

}

【问题讨论】:

    标签: c# asp.net-mvc-2 filter gzip deflate


    【解决方案1】:

    您可以忽略子操作:

    if (filterContext.IsChildAction)
    {
        return;
    }
    ...
    

    【讨论】:

    • 像魅力一样工作。谢谢。
    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2011-01-26
    相关资源
    最近更新 更多