Как программно очистить выходной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"); 
  • 404 Http-обработчик ошибок в Asp.Net MVC (RC 5)
  • ASP.NET MVC - найти абсолютный путь к папке App_Data из controllerа
  • Как зарегистрировать пользователя, когда они закрывают свой браузер или вкладку в ASP.NET MVC?
  • Ajax.BeginForm в MVC для загрузки файлов
  • Разница между ApiController и controllerом в ASP.NET MVC
  • Получить дополнительные данные из структуры MVC5. Поставщик идентификации OAuth / OWin с внешним поставщиком авторизации
  • Перенаправление из атрибута фильтра действия
  • Относительные пути ASP.NET MVC
  • Самое большое преимущество использования ASP.Net MVC против веб-форм
  • Использование HtmlHelper в controllerе
  • Индикатор выполнения для длительных вызовов сервера в ASP.Net MVC
  • Interesting Posts

    Android Studio – проблемы с Lollipop, ADB и Genymotion: устройства не появятся. «Сервер adb устарел. убийство … “

    Невозможно разместить значки в нижней строке рабочего стола (Windows 7)

    Существуют ли эффективные антибликовые экраны?

    Добавить строку по ссылке в конце объекта data.table

    Как вызвать десериализатор по умолчанию из пользовательского десериализатора в jacksonе

    Есть ли способ обрабатывать async / ждать службы ASMX?

    Crypt32.dll нарушен для Virtualbox с патча во вторник 9-дек-2014?

    Определение активного сетевого интерфейса

    .NET 4.0 и страшный OnUserPreferenceChanged Hang

    Сортировка списка Java: есть ли способ сохранить список, который автоматически сортируется автоматически, например TreeMap?

    Как генерировать случайные целые числа в определенном диапазоне в Java?

    регулярное выражение для имени и фамилии

    Как вы снимаете защиту макросов VBA для книги с поддержкой макросов, если вы забыли пароль?

    Клиент удаленного рабочего стола в Windows 7 Full Screen Issue

    Форматировать столбец (или ячейку) Excel как текст в C #?

    Давайте будем гением компьютера.