Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Кроме применения атрибута OutputCache
можно управлять кэшем динамически с помощью свойства Response.Cache.
Это свойство представляет объект класса HttpCachePolicy, в котором определены следующие методы и свойства:
SetCacheability(policy)
: устанавливает у ответа заголовок Cache-Control
с помощью перчисления HttpCacheability. Устанавливая данный параметр,
мы можем определить место хранения кэшируемых данных - клиент или сервер
SetExpires(date)
: устанавливает с помощью объекта DateTime у ответа заголовок Expires
, который определяет срок окончания кэширования
SetLastModified(date)
: устанавливает с помощью объекта DateTime у ответа заголовок Last-Modified
SetMaxAge(period)
: устанавливает с помощью объекта TimeSpan у заголовка Cache-Control
флаг max-age
SetNoServerCaching()
: отключает для данного ответа кэширование на стороне сервера
SetNoStore()
: добавляет к заголовку Cache-Control
флаг no-store
SetNoTransforms()
: добавляет к заголовку Cache-Control
флаг no-trans
SetProxyMaxAge(period)
: устанавливает с помощью объекта TimeSpan у заголовка Cache-Control
флаг s-maxage
SetVaryByCustom(name)
: устанавливает параметр, в зависимости от которого будет выбираться версия кешированных данных. Аналогично применению параметра VaryByCustom
в атрибуте OutputCache
VaryByHeaders
: определяет заголовки, которые используются для выбора версии кэша
VaryByParams
: определяет параметры строки запроса или форм, которые используются для выбора версии кэша
Используем некоторые из этих методов:
public class HomeController : Controller { static int x = 9; public string Index() { Response.Cache.SetExpires(DateTime.Now.AddSeconds(30)); Response.Cache.SetCacheability(HttpCacheability.Public); x++; return x.ToString(); } }
Для кэширования в данном случае не нужен атрибут OutputCache, так как все делается через свойство Response.Cache
. Выражение Response.Cache.SetExpires(DateTime.Now.AddSeconds(30))
определяет 30-ти секундный период кэширования. А выражение Response.Cache.SetCacheability(HttpCacheability.Public)
устанавливает в ответе для
заголовка Cache-Control
значение public
, которое указывает, что контент кэшируется как на клиенте, так и на прокси-сервере.
Его действие аналогично применению значения OutputCacheLocation.Downstream
для параметра Location
атрибута OutputCache
Кроме значения HttpCacheability.Public
перечисление HttpCacheability может иметь еще несколько значений:
NoCache: устанавливает в ответе для заголовка Cache-Control
значение no-cache
, которое указывает,
что контент не будет кэшироваться. При использовании атрибута OutputCache аналог - OutputCacheLocation.None
Private: устанавливает в ответе для заголовка Cache-Control
значение private
, которое указывает,
что контент будет кэшироваться только на клиенте. Аналог - OutputCacheLocation.Client
Server: устанавливает в ответе для заголовка Cache-Control
значение no-cache
. Контент будет
кэшироваться только в выходном кэше ASP.NET. Аналог - OutputCacheLocation.Server
ServerAndNoCache: объединяет действие значений Server
и NoCache
ServerAndPrivate: объединяет действие значений Server
и Private
(кэширование на клиенте и сервере)
Например, используем только выходной кэш сервера без кэширования на клиенте:
public string Index() { Response.Cache.SetExpires(DateTime.Now.AddSeconds(30)); Response.Cache.SetCacheability(HttpCacheability.Server); x++; return x.ToString(); }