MVC为调试模式下的控制器操作禁用缓存

时间:2019-02-07 14:00:10

标签: c# asp.net-mvc

我的控制器动作装饰有OutputCache属性:

    [OutputCache(Duration = 60 * 60 * 12, VaryByParam = "*")]
    public ActionResult GetProducts(int id, string template, string version)

我想在调试模式下禁用它,所以我使用了web.config转换,因此在调试模式下,我得到了以下额外的信息:

<caching>
  <outputCache enableOutputCache="false" enableFragmentCache="false" />
</caching>

但是缓存仍然有效-缓存了操作结果,更改视图内的代码在呈现时不起作用。

有什么想法吗?

IT Man

2 个答案:

答案 0 :(得分:1)

您需要使用CacheProfile

[OutputCache(CacheProfile = "CacheProfile1")]
public ActionResult GetProducts(int id, string template, string version)

web.config:

<system.web>
  <caching>
    <outputCacheSettings>
      <outputCacheProfiles>
        <add name="CacheProfile1" duration="0" varyByParam="*" />
      </outputCacheProfiles>
    </outputCacheSettings>
  </caching>
</system.web>

在web.Release.config上进行的转换:

<system.web>  
  <caching>
    <outputCacheSettings>
      <outputCacheProfiles>
        <add name="CacheProfile1" duration="43200" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
      </outputCacheProfiles>
    </outputCacheSettings>
  </caching>
</system.web>

将其发布为发布模式时,它将为web.config生成该文件:

<add name="CacheProfile1" duration="43200" varyByParam="*" />

答案 1 :(得分:0)

您可以这样做:

#if (!DEBUG)
[OutputCache(Duration = 60 * 60 * 12, VaryByParam = "*")]
#endif

#if (C# Reference)