ASP.NET OutputCache varyByParam在Web.config中不起作用

时间:2014-05-20 16:08:19

标签: asp.net asp.net-mvc

我正在尝试缓存一些昂贵的生成图表。所以我在Web.config中执行了此操作:

<caching>
  <outputCacheSettings>
      <outputCacheProfiles>
          <!-- 4 hours : 60 sec x 60 min x 4 hour = 14400 sec -->
          <add name="ChartCacheProfile" duration="14400" varyByParam="none" />
      </outputCacheProfiles>
  </outputCacheSettings>
</caching>  

我在Controller

中添加了此内容
[OutputCache(CacheProfile="ChartCacheProfile")]
public ActionResult GenerateChart()

但是这不起作用......,结果仍然没有缓存,Action总是被执行。这可能需要1分钟才能完成。

请注意,每次都会使用不同的参数调用url。该参数与正在生成的图表无关。这就是我放varyByParam="none"

的原因

2 个答案:

答案 0 :(得分:5)

我怀疑它确实是一个错误。对我有用的是在VaryByParam属性中明确设置OutputCache

[OutputCache(CacheProfile="ChartCacheProfile", VaryByParam="None")]
public ActionResult GenerateChart()

答案 1 :(得分:2)

我厌倦了这个问题,不得不为每个动作设置varyByParam。所以这里是输出缓存属性的简单代码,它从web.config获取varyByParam。 https://github.com/unconnected4/MvcOutputCacheFix/blob/master/ParameterizedOutputCacheAttribute.cs