我在我的MVC应用程序中使用标准的outputcache标签,它运行良好,但我需要强制它在某些时候被转储.我该如何实现这一目标?缓存的页面是从一个非常简单的路径{Controller}/{PageName}构建的 - 所以大多数页面都是这样的:/ Pages/About-Us
以下是我的.aspx视图页面顶部的输出缓存标记:
<@ OutputCache Duration="100" VaryByParam="None" %>
因此,在内容更新的同一控制器上的另一个操作中,我需要转储此缓存,甚至是所有缓存 - 这是一个非常小的应用程序,因此转储所有缓存项目并不是一件大事.
使用"无"与""时要小心.
如果您发送""那么对于的HTTPHeader 因人而异的不发送.
如果你发送"无",然后为的HTTPHeader 因人而异 被发送.
我用Fiddler来验证这种行为.
这似乎对浏览器是否返回服务器以检查最新版本(导致304)有影响.至少在Chrome中它确实如此.你想用Varies=""
,如果你肯定知道你是不是打算要更新的文件之前已过期.
我建议Varies=""
像我在这篇文章中所做的那样使用.对于我的javascript文件,我不希望浏览器返回并发出另一个Http请求,直到它过期.304是不必要的.
HttpResponse.RemoveOutputCacheItem()
可能是你想要使用的方法.如果您可以确定缓存操作的名称,则可以仅删除特定操作(尝试设置断点或将缓存项的所有名称转储到屏幕)
否则,我将遍历整个输出缓存并清除每个项目.
不知道VaryByParam的"无"和""之间的区别,我使用的是这个属性:
[OutputCache(Location=OutputCacheLocation.ServerAndClient, Duration=int.MaxValue, VaryByParam="none")]
而这段代码"修复"了这个Vary: *
问题:
this.Response.Cache.SetOmitVaryStar(true);
我发现在ASP.NET缓存测试中引用的是VaryByParam的错误
设置为"Client"和"ServerAndClient"的OutputCache指令之间的区别在于"ServerAndClient"输出Vary字段.这正在影响IE,因为IE无论如何都在发送请求.使用vary:*标头可以禁用所有客户端缓存(http://msdn2.microsoft.com/en-us/library/system.web.httpcachepolicy.setomitvarystar.aspx).
删除vary:*标头的唯一方法是允许客户端缓存是通过代码: