В каком порядке используются фильтры, выполненные в asp.net mvc
В MVC мы можем украсить методы действий различными фильтрами, например
[HttpPost]
[Authorize]
public ActionResult mymethod(){}
HttpPost
происходит от MethodSelectorAttribute
(возможно, косвенно), а атрибут Authorize
наследуется от ActionFilterAttribute
.
Мой вопрос: в каком порядке они выполняются в конвейере запроса MVC? Я попытался найти поиск в исходном коде MVC, но не смог найти соответствующие биты кода.
Ответы
Ответ 1
Фильтры выполняются в следующем порядке:
- Фильтры авторизации
- Фильтры действий
- Фильтры ответов
- Фильтры исключений
Например, фильтры авторизации запускаются первыми, а фильтры исключений запускаются последними. В каждом типе фильтра значение Order определяет порядок выполнения. В каждом типе и порядке фильтра значение перечисления Scope указывает порядок фильтров. Это перечисление определяет следующие значения области фильтра (в том порядке, в котором они выполняются):
- Первая
- Global
- контроллер
- Действие
- Last
Извлечен из MSDN
Ответ 2
Чтобы сэкономить некоторое время, вы устанавливаете порядок:
[MyCustomContextFilter(Order=1)]
Индекс основан на 0, поэтому вы можете делать 0, 1, 2 и т.д.
Следует отметить, что только потому, что фильтр находится в базовом классе, он не указывает MVC сначала применить его: (.