加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – OutputCache和自定义gzip压缩过滤器

发布时间:2020-12-16 03:53:21 所属栏目:asp.Net 来源:网络整理
导读:我有这个自定义过滤器来压缩我的页面输出: public class EnableCompressionAttribute : ActionFilterAttribute{ const CompressionMode compress = CompressionMode.Compress; public override void OnActionExecuting(ActionExecutingContext filterContex
我有这个自定义过滤器来压缩我的页面输出:

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,"deflate");
        }
    }
}

我从本书获得了代码:Pro ASP.NET MVC V2 Framework(.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是??默认情况下的最后一个过滤器,并且没有办法改变它.有人可以证实吗?

解决方法

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

从页面..

订单很重要

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读