UR.ANUS
Asp.net mvc framework
вернуться

Магдануров Гайдар Ильдарович

Шрифт:

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

ActionResult — это базовый класс, экземпляр которого возвращает любое действие контроллера в ASP.NET MVC. В MVC существует несколько стандартных реализаций класса ActionResult: ViewResult, JsonResult, FileResult, RedirectResult, RedirectToRouteResult, ContentResult, EmptyResult. Их назначение и тип возвращаемых данных перечислены в табл. 4.1.

Когда действие завершает свое выполнение, оно возвращает результат в виде базового класса ActionResult или его наследников. После этого механизм MVC вызывает у возвращенного результата стандартный метод ExecuteResult, который и формирует результат, получаемый клиентом.

ViewResult

ViewResult — это стандартный и самый используемый на практике результат, наследующий тип ActionResult, который возвращается действиями контроллеров. Назначение ViewResult — это определение представления, которое будет использовано механизмом MVC для представления состояния модели.

У ViewResult и базового класса ViewResultBase, от которого ViewResult унаследован, есть ряд параметров:

? ViewData — хранилище данных модели, которые используются представлением для отображения результата работы действия;

? TempData — аналогичное viewData хранилище данных модели, но с существенным отличием, которое позволяет данным храниться после перенаправления запроса на другое действие;

? viewName — имя представления, которое должно отреагировать на изменение модели контроллером. Иными словами, этот параметр указывает механизму MVC, какое представление нужно использовать для отображения результата работы действия;

? MasterName — имя master-представления, которое должно быть использовано для отображения результата работы действия;

? view — экземпляр представления, которое должно быть использовано для отображения результата работы действия. Может быть использовано вместо параметра viewName для определения представления.

Обычно для возвращения результата типа viewResult из действия используется стандартный метод контроллера view, который принимает те же параметры, что и viewResult. Рассмотрим пример вызова метода view:

  • Читать дальше
  • 1
  • ...
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • ...

UR.ANUS - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • support@anus.bid