asp.net-mvc-3 – OutputCache和自定义gzip压缩过滤器
我有这个自定义过滤器来压缩我的页面输出:
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优先级,它采用正整数和从最低到最高的顺序). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – !ClrStack -a调用ASP.NET MVC应用程序显示
- asp-classic – 如何从此ADODB.Recordset获取插入ID?
- ASP.NET MVC 3中的c# – @ Html.ActionLink
- asp.net-mvc-4 – OAuth2和DotNetOpenAuth – 实现Google自
- asp.net – 如何使用.net用户控件创建Umbraco内容节点?
- asp.net-mvc – 将查询字符串参数传递给.net mvc中的UrlHel
- asp.net-mvc – 您是否使用任何自定义ASP.NET MVC HtmlHelp
- asp.net – 什么时候在普通的HTML上使用runat =“server”
- 如何在asp.Net中的脚本标签上使用runat =“server”
- asp.net – Visual Studio开发服务器不更新css和javascript
- asp.net-mvc – 如何使用状态代码返回客户端错误
- asp.net-mvc – 使用DTO而不是域实体进行ASP.NET
- asp.net – 如何在Entity框架中添加表?
- asp.net-mvc-3 – 在LINQ Query中调用一个方法
- ASP.NET Web Api HttpResponseException 400(错误
- asp.net – 如何在iframe中提交后刷新iframe父页
- 用户控件在asp.net和Performance中
- asp.net-mvc-4 – 简单会员:用户的上次登录日期
- Response.Flush不工作ASP.NET
- asp.net – Databinder.Eval和Container.DataIte