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...
}
Это скомпилирует атрибут только тогда, когда выбраны не отладочные конфигурации.