В каком порядке выполняются фильтры в asp.net mvc - PullRequest
50 голосов
/ 03 июля 2011

В MVC мы можем декорировать методы действия различными фильтрами, такими как

[HttpPost]
[Authorize]
public ActionResult mymethod(){}

HttpPost происходит от MethodSelectorAttribute (возможно, косвенно), а атрибут Authorize наследуется от ActionFilterAttribute.

Мой вопрос: в каком порядке они выполняются в конвейере запросов MVC?Я пытался искать в исходном коде MVC, но не смог найти соответствующие биты кода.

Ответы [ 2 ]

72 голосов
/ 03 июля 2011

Фильтры работают в следующем порядке:

  1. Фильтры авторизации
  2. Фильтры действий
  3. Фильтры ответов
  4. Фильтры исключений

Например, фильтры авторизации запускаются первыми, а фильтры исключений - последними.В каждом типе фильтра значение Order указывает порядок выполнения.В пределах каждого типа и порядка фильтра значение перечисления Scope определяет порядок для фильтров.Это перечисление определяет следующие значения области фильтра (в порядке их запуска):

  1. Первый
  2. Глобальный
  3. Контроллер
  4. Действие
  5. Последний

Извлечено из MSDN

22 голосов
/ 31 октября 2013

Чтобы сэкономить время, вы устанавливаете заказ следующим образом:

[MyCustomContextFilter(Order=1)]

Индекс основан на 0, так что вы можете сделать 0, 1, 2 и т. Д. *

Следует отметить, что только то, что фильтр находится в базовом классе, не говорит MVC, чтобы применять его первым:

...