【发布时间】: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