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

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

if(filterContext.ChildRequest or perhaps ChildAction)
{
}

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


person Muhammad Adeel Zahid    schedule 25.07.2011    source источник


Ответы (2)


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

person Tz_    schedule 25.07.2011
comment
где параметры метода действия выбираются и проверяются на предмет изменений, если мы указали свойство VaryByParam для id; name - person Muhammad Adeel Zahid; 25.07.2011
comment
В OutputCacheModule это делается путем генерации ключа элемента кеша, который зависит от заданных переменных параметров. Этот ключ используется для хранения / поиска значений в кеше. Ключ кеша встроен в закрытый метод CreateOutputCachedItemKey, который исследует строку запроса, данные формы и т. Д. В соответствии с указанными параметрами. - person Tz_; 25.07.2011

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

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

person nakhli    schedule 25.07.2011