Расширение из атрибута OutputCache asp.net mvc - PullRequest
0 голосов
/ 25 июля 2011

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

if(filterContext.ChildRequest or perhaps ChildAction)
{
}

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

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

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

0 голосов
/ 25 июля 2011

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

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

...