Фильтр действий и результатов выполнения запроса в ASP.NET MVC

ASP.NET MVC позволяет контролировать процесс выполнения методов действий контроллера и выдачу результата выполнения HTTP запроса с помощью специальных атрибутов. Это даёт возможность выполнить определённые операции как до вызова метода, так и после него.

Для реализации таких атрибутов служит базовый абстрактный класс ActionFilterAttribute, который содержит четыре виртуальных метода:

  • OnActionExecuting — вызывается перед вызовом метода действия;
  • OnActionExecuted — вызывается после выполнения метода действия;
  • OnResultExecuting — вызывается перед тем как метод действия начнёт возвращать результат;
  • OnResultExecuted — вызывается после того, как метод действия возвратил результат.

Все методы принимают только один параметр. Первые два — контекст выполнения действия, последние два — контекст формирования результата.

Чтобы создать атрибут для управления процессом выполнения запроса необходимо унаследоваться от класса ActionFilterAttribute и реализовать необходимые методы из числа вышеперечисленных.

Рассмотрим работу фильтров действий и результатов на конкретных примерах.

Вначале рассмотрим обработку событий после полного выполнения HTTP запроса (выдачи результата выполнения действия). Создадим атрибут, который будет при вызове отмеченных им действий контроллера автоматически записывать в файл некоторую информацию. По сути, автоматически логировать действия пользователя.

Теперь для того, чтобы логировать вызов того или иного действия контроллера достаточно добавить к методу этого действия созданный выше атрибут.

Данный пример относится к категории простейших, так как совершенно не затрагивает контекст выполнения запроса (соответствующий параметр обработчика события не используется).

Попробуем усложнить задачу. Реализуем проверку параметров передаваемых действию контроллера перед выполнением.

В качестве примера, пусть при значении параметра testcode больше 5, действие не будет выполняться.

В данном классе атрибута нет специального конструктора, так как он здесь в принципе не требуется. В обработчике OnActionExecuting вначале мы проверяем наличие параметра и его формат (что это целое число) и только после этого анализируем его значение. Если параметр testcode не задан, не является целым числом или имеет значение больше 10, будет возбуждено исключение.

Обработка контекста даёт возможности очень гибко обрабатывать события связанные с выполнением методов действий контроллеров. В частности, можно сделать фильтрацию по типу браузера и даже заставить действие контроллера обрабатывать те параметры, которые для него не предусмотрены.

Для того чтобы реализовать последнее в рамках приведённого примера достаточно изменить в нём всего лишь одну строчку.

Обычное получение параметра:

Получение параметра из HTTP запроса:

Таким образом, использование фильтров действий и результатов значительно расширяет возможности доступные разработчику в рамках ASP.NET MVC.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *