Расширение из атрибута OutputCache asp.net mvc

В последнее время я изучал исходный код атрибута OutputCache в asp.net mvc-3 с намерением унаследовать и настроить его в соответствии с потребностями моего приложения. Я ожидал, что он будет включать в себя некоторый механизм кэширования, но мне не удалось найти место, где он хранит результат и действие в кеше и извлекает при последующих запросах. Более того, в реализации onActionExecuting, onResultExecuting и т.д. я видел код как

if(filterContext.ChildRequest or perhaps ChildAction)
{
}

и если текущий запрос не является дочерним атрибутом кэша действий, кажется, ничего не делает. Может кто-нибудь объяснить это поведение. Кроме того, где на самом деле выполняется кэширование, если не в атрибуте OutuptCache?

2 ответа

Решение

На основании кода, если это не дочернее действие, он делегирует обработку кэша обратно стандартной инфраструктуре ASP.NET. Это происходит в OnResultExecuting, где он проверяет, не является ли он дочерним действием, а затем создает оболочку OutputCachedPage для выполнения запроса. Эта обертка наследуется от System.Web.UI.Page и инициализирует кэширование вывода методом InitOutputCache. Этот метод настраивает политику кэширования для ответа (Response.Cache). Я думаю, что фактическое кэширование происходит в System.Web.Caching.OutputCacheModule (методы OnEnter, OnExit), наконец, на основе политики кэширования, ранее установленной на странице.

Кэширование выполняется не на уровне фреймворка, а в веб-сервере (IIS), промежуточных прокси-серверах, кэше конечного клиента (браузера) и т. Д.

Перечисление расположения кэша дает больше информации о том, где данные кэшируются.

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