□ Duration
— значение времени в секундах, на которое производится кэширование;
□ Location
— значение перечисления OutputCacheLocation
, которое определяет местоположение для кэшированного содержимого: на стороне клиента или сервера. По умолчанию устанавливается значение OutputCacheLocation.Any
, это означает, что содержимое может кэшироваться в любом месте;
□ Shared
— булево значение, которое определяет, может ли использоваться один экземпляр кэшированного значения для многих страниц. Используется, когда действие возвращает результат в виде не целой страницы, а в виде частичного результата;
□ VaryByCustom
— любой текст для управления кэшированием. Если этот текст равен browser
, то кэширование будет производиться условно по имени браузера и его версии (major version). Если у VaryByCustom
будет указана строка, то вы обязаны переопределить метод GetVaryByCustomString
в файле Global.asax для осуществления условного кэширования;
□ varyByHeader
— строка с разделенными через точку с запятой значениями HTTP-заголовков, по которым будет производиться условное кэширование;
□ varyByParam
— задает условное кэширование, основанное на значениях строки запроса при GET или параметрах при POST;
□ varyByContentEncodings
— указывает условие кэширования в зависимости от содержимого директивы HTTP-заголовка Accept-Encoding;
□ CacheProfile
— используется для указания профиля кэширования заданного через web.config и секцию caching;
□ NoStore
— принимает булево значение. Если значение равно true, то добавляет в директиву HTTP-заголовка Cache-Control параметр no-store;
□ SqlDependency
— строковое значение, которое содержит набор пар строк "база данных" и "таблица", от которых зависит кэшируемое содержимое. Позволяет управлять кэшированием на основе изменений определенных таблиц в базе данных.
В качестве примера рассмотрим следующий фрагмент кода, в котором устанавливается кэширование 1800 секунд (30 минут) любого результата контроллера AdminController
вне зависимости от параметров запроса:
[OutputCache(Duration = 1800, VaryByParam = ="none")]
public class AdminController : Controller
В другом фрагменте, наоборот, с помощью атрибута OutputCacheAttribute
отключается любое кэширование результатов контроллера AdminController
:
[OutputCache(Location = OutputCacheLocation.None)]
public class AdminController : Controller
В своей работе атрибут OutputCacheAttribute
переопределяет метод OnResultExecuting
, который вызывается перед исполнением результата действия, когда результат типа ActionResult
преобразуется в ответ на запрос пользователя, например в HTML-страницу. Вы можете создать свои варианты реализации ActionFilterAttribute
, реализовав атрибут, переопределяющий ActionFilterAttribute
. Для демонстрации подобной реализации создадим атрибут, который реализует сжатие результирующих страниц с помощью GZip-сжатия, которое поддерживается всеми современными браузерами.
В листинге 4.5 представлен код атрибута GZipCompressAttribute
, который реализует механизм сжатия результата действия через GZip.
Листинг 4.5
using System;
using System.IO.Compression;
using System.Web.Mvc;
namespace MVCBookProject {
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,
Inherited = true, AllowMultiple = false)]
public class GZipCompress : ActionFilterAttribute {
public override void OnActionExecuting(
ActionExecutingContext filterContext)
{
string acceptEncoding = filterContext.HttpContext.Request
.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding)) return;
var response = filterContext.HttpContext.Response;
if (acceptEncoding.ToLower().Contains("gzip"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(
response.Filter, CompressionMode.Compress);
}
}
}
}
Обратите внимание, что атрибут GZipCompressAttribute
наследует от ActionFilterAttribute
и реализует метод OnActionExecuting
, в котором С Помощью класса GZipStream
производится сжатие. Использование нашего атрибута тривиально, например, применяем его для контроллера AdminController
так, как показано во фрагменте кода:
[GZipCompress]
public class AdminController : Controller
Реализация своего варианта ActionFilterAttribute
— это очень мощное средство для расширения механизма ASP.NET MVC. Благодаря ему, мы реализовали прозрачное и простое средство для GZip-сжатия ответов для клиента. Другим стандартным средством, которое использует ActionFilterAttribute
, является атрибут outputcacheAttribute
, который позволяет управлять кэшированием результатов действий контроллера.
Стандартные реализации класса ActionResult
Читать дальше
Конец ознакомительного отрывка
Купить книгу