gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:26:23 27 4
gpt4 key购买 nike

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

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 是最后一个过滤器,并且无法更改它。有人可以证实这一点吗?

最佳答案

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

从页面..

顺序很重要

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

关于asp.net-mvc-3 - OutputCache 和自定义 gzip 压缩过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6871134/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com