【问题标题】:Mvc Donut Caching disable caching programmaticallyMvc Donut Caching 以编程方式禁用缓存
【发布时间】:2015-08-10 15:40:27
【问题描述】:

我在我的项目中使用MvcDonutCaching 并寻找一种方法来全局禁用缓存以在调试/测试期间提供帮助。

尽管我确实找到了CacheSettingsManager,它公开了IsCachingEnabledGlobally 属性,但我在文档中找不到任何关于如何实现此目的的示例,但这是readonly

CacheSettingsManager 也没有任何允许我配置此设置的构造函数。有没有办法配置这个设置?

有一个替代解决方案可能有效(丑陋),但它绝对是最后的手段,不应该真的有必要:

public class CustomOutputCache : DonutOutputCacheAttribute
{
    public CustomOutputCache()
    {
        if(ConfigurationManager.AppSettings["UseCache"] == "false")
        {
            base.NoStore = true;
            base.Duration = 0;
        }
    }
}

然后在我的控制器操作上使用它:

[CustomOutputCache]
public ActionResult Homepage() 
{
    // etc...
}

有正确的方法吗?

【问题讨论】:

    标签: c# asp.net-mvc caching donut-caching


    【解决方案1】:

    这是一个丑陋的解决方案,但您可以考虑使用编译标志。比如:

    #if !DEBUG
    [DonutOutputCache]
    #endif      
    public ActionResult Homepage() 
    {
       // etc...
    }
    

    这将仅在选择非调试配置时编译属性。

    【讨论】:

      【解决方案2】:

      如果其他人偶然发现这一点,请在您的 FilterConfig.cs 中添加以下内容

      public class AuthenticatedOnServerCacheAttribute : DonutOutputCacheAttribute
      {
          private OutputCacheLocation? originalLocation;
      
          public override void OnResultExecuting(ResultExecutingContext filterContext)
          {
      
              //NO CACHING this way
              if (ConfigurationManager.AppSettings["UseCache"] == "false")
              {
                  originalLocation = originalLocation ?? Location;
                  Location = OutputCacheLocation.None;
              }
              //Caching is on
              else
              {
                  Location = originalLocation ?? Location;
              }
      
              base.OnResultExecuting(filterContext);
          }
      }
      

      您现在可以将其添加到您的控制器中。

          [AuthenticatedOnServerCache(CacheProfile = "Cache1Day")]
          public ActionResult Index()
          {
              return View();
          }
      

      此答案的灵感来自Felipe's 此处的答案。 https://stackoverflow.com/a/9694955/1911240

      【讨论】:

        猜你喜欢
        • 2018-10-26
        • 2015-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多