呈现视图时,客户端缓存会覆盖自定义 Last-Modified
Client caching overrides custom Last-Modified when rendering a View
我最近开始做一个 MVC.NET 项目,很快发现 front-page 没有缓存。在 Index() 方法上设置 [OutputCache(Duration = 60), Location = Client]
添加了正确的 Expires
标题,但由于 Last-Modified
设置为页面创建时间,因此缓存永远不会启动。
作为实验,我然后手动尝试将 Last-Modified
header 设置为过去的某个时间,以查看它是如何工作的,但似乎在某处被覆盖了!我将此代码添加到我的 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;
即使我可以调试和检查响应中的 headers 并看到添加了 header,浏览器中返回的页面仍然有 Last-Modified: Wed, 09 Mar 2016 15:34:12 GMT
(当前时间).因此,我的手动设置 header 在操作返回后被其他代码覆盖。
是什么导致了这种行为,我如何手动设置 last-modified 时间戳以启用缓存?
附录
使用 Location = ServerAndClient
将使客户端缓存再次工作,这让我感到有些奇怪......如果,那么 Client
选项有什么用?它怎么会起作用?
OutputCache
属性覆盖了我传递的相关 headers。删除它可以设置任何我喜欢的 headers。
并回答第二个问题,即客户端选项何时有意义,请注意刷新浏览器时您永远看不到任何效果 window。只有当您单击链接时,浏览器才会决定是否应重用缓存版本。
我最近开始做一个 MVC.NET 项目,很快发现 front-page 没有缓存。在 Index() 方法上设置 [OutputCache(Duration = 60), Location = Client]
添加了正确的 Expires
标题,但由于 Last-Modified
设置为页面创建时间,因此缓存永远不会启动。
作为实验,我然后手动尝试将 Last-Modified
header 设置为过去的某个时间,以查看它是如何工作的,但似乎在某处被覆盖了!我将此代码添加到我的 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;
即使我可以调试和检查响应中的 headers 并看到添加了 header,浏览器中返回的页面仍然有 Last-Modified: Wed, 09 Mar 2016 15:34:12 GMT
(当前时间).因此,我的手动设置 header 在操作返回后被其他代码覆盖。
是什么导致了这种行为,我如何手动设置 last-modified 时间戳以启用缓存?
附录
使用 Location = ServerAndClient
将使客户端缓存再次工作,这让我感到有些奇怪......如果,那么 Client
选项有什么用?它怎么会起作用?
OutputCache
属性覆盖了我传递的相关 headers。删除它可以设置任何我喜欢的 headers。
并回答第二个问题,即客户端选项何时有意义,请注意刷新浏览器时您永远看不到任何效果 window。只有当您单击链接时,浏览器才会决定是否应重用缓存版本。