【问题标题】:Why wont my application cache using OutputCache为什么我的应用程序不使用 OutputCache 缓存
【发布时间】:2015-05-05 00:43:37
【问题描述】:

我不知道为什么我的应用程序没有缓存首页。

我在页面上放置了一个日期戳:@DateTime.Now

这是 Home 控制器操作

[OutputCache(Duration = 60)]
public ActionResult Index()
{
    return View();
}

但是,缓存不起作用,首页不断更改日期。

我已尝试将首页和相关布局减少到最低限度,因此只有 DateTime.Now 被标记。

我已检查所有基本控制器是否有任何禁用缓存代码。

还检查了 global.asax

检查 web.config 是否有任何缓存配置 - 无。

用提琴手检查。这是响应头。

HTTP/1.1 200 OK
Cache-Control: public, no-cache="Set-Cookie", max-age=60
Content-Type: text/html; charset=utf-8
Expires: Wed, 04 Mar 2015 05:20:45 GMT
Last-Modified: Wed, 04 Mar 2015 05:19:45 GMT
Vary: *

我也尝试了不同的浏览器,它们不会修改任何本地缓存设置。

还尝试将应用程序部署到阶段服务器,这样它就不会在我的开发机器上运行。

尝试制作一个全新的 asp.net mvc 应用程序。那确实奏效了。至少在告诉我该技术有效方面有些帮助。

问题可能出在哪里?

【问题讨论】:

  • 我不确定这是否对您有帮助,但如果您的“首页”恰好使用 [Authorize] 属性(它可以注册为全局过滤器),[Authorize] 属性将禁用输出缓存。
  • ty,很好的提示。不使用授权并检查控制器继承的任何其他属性。
  • 依靠浏览器缓存text/html 的方式甚至不会从服务器重新请求它,这不太可能在大多数现代浏览器中工作。如果您希望看到您的时间戳在 60 秒内没有变化,请将缓存副本存储在服务器中:[OutputCache(Duration = 60, Location = OutputCacheLocation.Server)]

标签: asp.net asp.net-mvc-3 caching outputcache


【解决方案1】:

需要检查的几件事:

  1. 如果这是在您的生产环境中,请检查是否在 IIS 上启用了输出缓存。见this page

  2. 尝试切换缓存位置以帮助缩小问题所在:

例如

[OutputCache(Duration = 60, Location = OutputCacheLocation.Server)]
[OutputCache(Duration = 60, Location = OutputCacheLocation.Client)]
  1. 检查您的 web.config 是否有任何可能覆盖默认行为的 [缓存] 条目

【讨论】:

  • 嗨尼克,感谢您的建议。认为我已经找到了问题,只是还不知道为什么,并且会在我这样做时发布答案。 Nutshell 是 Homt.Index 动作覆盖了基本控制器动作。一个常规的 Home.Contact 动作正在缓存。
  • 我已经安装了 Donut Caching,现在我的问题已经解决了。
猜你喜欢
  • 2012-01-30
  • 2013-11-30
  • 2015-03-05
  • 1970-01-01
  • 2013-03-19
  • 2020-05-08
  • 2020-08-27
  • 2017-03-31
  • 1970-01-01
相关资源
最近更新 更多