【问题标题】:OutputCache and a custom gzip compression filterOutputCache 和自定义 gzip 压缩过滤器
【发布时间】:2011-07-29 09:29:20
【问题描述】:

我有这个自定义过滤器来压缩我的页面输出:

public class EnableCompressionAttribute : ActionFilterAttribute
{
    const CompressionMode compress = CompressionMode.Compress;
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;
        HttpResponseBase response = filterContext.HttpContext.Response;
        string acceptEncoding = request.Headers["Accept-Encoding"];
        if (acceptEncoding == null)
            return;
        if (acceptEncoding.ToLower().Contains("gzip"))
        {
            response.Filter = new GZipStream(response.Filter, compress);
            response.AppendHeader("Content-Encoding", "gzip");
        }
        else if (acceptEncoding.ToLower().Contains("deflate"))
        {
            response.Filter = new DeflateStream(response.Filter, compress);
            response.AppendHeader("Content-Encoding", "deflate");
        }
    }
}

我从书中得到代码:Pro ASP.NET MVC V2 Framework (Expert's Voice in .NET)。

现在我有一个像这样的操作方法:

[OutputCache(Order=1, Duration=300,VaryByParam="*", VaryByContentEncoding="gzip; deflate")]
[EnableCompression(Order=0)]
public ActionResult About()
{
    return View();
}

如何确保 OutputCache 过滤器正在缓存压缩内容?像本例那样使用“Order”参数就足够了吗?

如何查看缓存中发生了什么?

干杯。

更新:我已经用 Fiddler 进行了测试,显然无论您在过滤器上使用什么顺序,它都可以工作...我得到第一个使用 gzip 编码的响应,并在以下请求中得到 http.302如果允许客户端缓存它,或者如果只允许服务器,则使用 gzip 编码的更多 http.200

这可能是因为默认情况下 OutputCache 是最后一个过滤器,并且无法更改它。有人可以证实这一点吗?

【问题讨论】:

    标签: asp.net-mvc-3 outputcache action-filter http-compression


    【解决方案1】:

    看看这个页面,http://www.klopfenstein.net/lorenz.aspx/my-take-on-asp-net-output-caching 那里有一些很好的信息,尤其是Jeff Atwood's advice on compressing cache items

    从页面..

    顺序很重要

    上面的 ActionFilter 必须绝对最后运行:正如我最近发现的那样,一旦一个动作过滤器改变了动作结果,当前的动作调用就会中止。这也意味着所有其他没有机会运行的操作过滤器将永远不会运行。如果您计划将此缓存方法添加到您的项目中,请确保所有过滤器都具有正确的优先级(使用 Order 优先级,它采用正整数和从低到高的顺序)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      相关资源
      最近更新 更多