Mvc Donut Caching отключить кеширование программно

Я использую 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...
}

Есть ли правильный способ сделать это?

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 Fujiy Pessoto здесь. /questions/8161507/kak-otklyuchit-keshirovanie-vyivoda-dlya-autentifitsirovannyih-polzovatelej-v-aspnet-mvc/8161508#8161508

Это уродливое решение, но вы можете рассмотреть возможность использования флагов компиляции. Что-то вроде:

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

Это скомпилирует атрибут только тогда, когда выбраны не отладочные конфигурации.

Другие вопросы по тегам