我最近开始研究一个MVC.NET项目,很快就注意到没有对头版进行缓存。在Index()方法上设置[OutputCache(Duration = 60), Location = Client]
添加了正确的Expires
标题,但由于Last-Modified
设置为创建页面的时间,因此缓存永远不会启动。
作为一项实验,我手动尝试将Last-Modified
标题设置为过去的某个时间,看看它是如何工作的,但好像在某处被覆盖了!我将此代码添加到Index()操作的末尾:
DateTime dt = DateTime.Parse("2015-12-01");
var timeString = dt.ToUniversalTime().ToString("R");
var v = View("Index", homeViewModel);
Response.AddHeader("Last-Modified", timeString);
return v;
即使我可以调试并检查Response中的标头并看到添加的标头,浏览器中返回的页面仍然有Last-Modified: Wed, 09 Mar 2016 15:34:12 GMT
(当前时间)。在操作返回后,我的手动设置标题被其他一些代码覆盖。
导致此行为的原因是,如何手动设置上次修改的时间戳以启用缓存?
附录
使用Location = ServerAndClient
将使客户端缓存再次起作用,这让我感到有些奇怪...如果,那么Client
选项有什么用?它怎么能运作?
答案 0 :(得分:0)
macroexpand-1
属性覆盖了我传递的相关标头。删除它可以设置我喜欢的任何标题。
要回答客户端选项何时有意义的第二个问题,请注意刷新浏览器窗口时永远不会看到任何效果。只有当您单击链接时,浏览器才会决定是否应该重用缓存版本。