【问题标题】:MVC OutputCache issueMVC 输出缓存问题
【发布时间】:2010-09-24 13:24:01
【问题描述】:

我正在尝试像这样在 MVC2 中缓存控制器操作的输出:

[OutputCache(Duration = 600, VaryByParam = "id", Location=System.Web.UI.OutputCacheLocation.Server)]
        public FileContentResult GetImage(int id) {
}

当用户为其图标上传新图像时,我使用以下行使缓存无效:

HttpResponse.RemoveOutputCacheItem("/MyPage/GetImage/" + u.UserID.ToString());

但这似乎不起作用,我不知道为什么

【问题讨论】:

  • 您的代码看起来正确。你能验证u.UserID.ToString() 正在返回正确的 id 吗?
  • 是的,它肯定会返回正确的 id

标签: asp.net-mvc-2 outputcache


【解决方案1】:

对此我不确定,但在我看来,即使您使用“Location=server”,它仍可能在客户端缓存(就好像根本没有 outputCache 属性一样),除非还有“NoStore=true” ”。

因此问题可能是客户端缓存的结果。

您可以通过使用调试工具(例如 fiddler 或浏览器内置的工具)检查客户端请求来检查是否是这种情况。

【讨论】:

  • 要验证这一点,请使用浏览器的调试工具网络 (net) 视图并查找 GetImage 调用的 304 状态。 304 表示浏览器不会返回服务器。为了克服这个问题,您可以在调用中添加时间戳作为额外参数。
  • @Steve 虽然添加一个额外的参数肯定会强制直接请求图像,但即使图像也没有更改,它也会这样做,这与他在第一名
  • 我理解您的逻辑,并且您可能是正确的,但是当浏览器发出请求时,服务器可能会使用它的缓存机制启动。我猜 - 现在无法测试。
  • @Steve 你的观点可能是对的,毕竟这就是 VaryByParam 的全部意义,毕竟 OutputCache 属性设置为 Location="server" 所以他没那么看用于客户端缓存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 2019-05-13
  • 2011-05-16
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多