Динамическое управление кэшем

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Кроме применения атрибута 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();
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850