Как программно очистить выходнойcache для метода действия controllerа

Если действие controllerа имеет атрибут OutputCache, указанный в действии, есть ли способ очистить выходной кеш без перезагрузки IIS?

[OutputCache (Duration=3600,VaryByParam="param1;param2")] public string AjaxHtmlOutputMethod(string param1, string param2) { var someModel = SomeModel.Find( param1, param2 ); //set up ViewData ... return RenderToString( "ViewName", someModel ); } 

Я рассматриваю использование HttpResponse.RemoveOutputCacheItem(string path) чтобы очистить его, но мне трудно понять, каким должен быть путь, чтобы сопоставить его с методом действия. Я снова попытаюсь использовать страницу aspx, отображаемую ViewName.

Возможно, я просто вручную RenderToString вывод RenderToString в HttpContext.Cache если я не смогу понять это.

Обновить

Обратите внимание, что OutputCache – VaryByParam, и тестирование жесткого пути «/ controller / action» на самом деле не очищает выходнойcache, поэтому похоже, что он должен соответствовать «/ controller / action / param1 / param2».

Это означает, что мне, вероятно, придется вернуться к кешированию уровня объектов и вручную кэшировать вывод для RenderToString() 🙁

Попробуй это

 var urlToRemove = Url.Action("AjaxHtmlOutputMethod", "Controller"); HttpResponse.RemoveOutputCacheItem(urlToRemove); 

ОБНОВЛЕНО:

 var requestContext = new System.Web.Routing.RequestContext( new HttpContextWrapper(System.Web.HttpContext.Current), new System.Web.Routing.RouteData()); var Url = new UrlHelper(requestContext); 

ОБНОВЛЕНО:

Попробуй это:

 [OutputCache(Location= System.Web.UI.OutputCacheLocation.Server, Duration=3600,VaryByParam="param1;param2")] 

В противном случае удаление кеша не будет работать, поскольку вы кэшировали вывод HTML на компьютере пользователя

В дополнение к принятому ответу, чтобы поддерживать параметры VaryByParam:

  [OutputCache (Duration=3600, VaryByParam="param1;param2", Location = OutputCacheLocation.Server)] public string AjaxHtmlOutputMethod(string param1, string param2) { object routeValues = new { param1 = param1, param2 = param2 }; string url = Url.Action("AjaxHtmlOutputMethod", "Controller", routeValues); Response.RemoveOutputCacheItem(url); } 

Однако ответ Егора намного лучше, потому что он поддерживает все значения OutputCacheLocation:

  [OutputCache (Duration=3600, VaryByParam="param1;param2")] public string AjaxHtmlOutputMethod(string param1, string param2) { if (error) { Response.Cache.SetNoStore(); Response.Cache.SetNoServerCaching(); } } 

Когда вызывается SetNoStore () и SetNoServerCaching () , они предотвращают кеширование текущего запроса. Дальнейшие запросы будут кэшироваться, если функции также не вызваны для этих запросов.

Это идеально подходит для обработки ситуаций с ошибками – когда обычно вы хотите кэшировать ответы, но не в том случае, если они содержат сообщения об ошибках.

Я думаю, что правильный stream:

 filterContext.HttpContext.Response.Cache.SetNoStore() 

Другой вариант – использовать VaryByCustom для OutputCache и обрабатывать недействительность определенных элементов кеша.

Возможно, это работает для вас, но это не общее решение вашей проблемы.

Добавить код в AjaxHtmlOutputMethod

 HttpContext.Cache.Insert("Page", 1); Response.AddCacheItemDependency("Page"); 

Чтобы очистить кэш вывода, вы можете использовать

 HttpContext.Cache.Remove("Page"); 
  • Как я могу вернуть текущее действие в представлении ASP.NET MVC?
  • Проверка MVC / JQuery не принимает запятую как разделитель
  • Управление ролью и разрешениями ASP.NET MVC3 -> С назначением разрешения времени выполнения
  • Замок Виндзорский резольвер для MVC 3
  • Загрузка файла ASP.NET MVC 3.0
  • Как я могу иметь строчные маршруты в ASP.NET MVC?
  • ASP.NET - AppDomain.CurrentDomain.GetAssemblies () - Ассембли отсутствуют после перезапуска AppDomain
  • Как реализовать пользовательский RazorViewEngine для поиска представлений в нестандартных местах?
  • URL-адрес перезаписи в .Net MVC
  • Является ли IDependencyResolver анти-шаблоном?
  • Как визуализировать частичный вид в строку
  • Давайте будем гением компьютера.