Выполняются ли фильтры ASP. NET MVC (того же типа) в том порядке, в котором они включены в код, и это гарантировано? - PullRequest
4 голосов
/ 19 марта 2020

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

  1. Global (FilterConfig.cs)
  2. Уровень контроллера
  3. Уровень действия

Я также знаю, что существует 4 типов и что они выполняются в следующем порядке:

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

Однако я немного запутался в приоритете:

  • Расположены ли местоположения в указанном порядке?
  • Предполагается, что местоположение выполняется в порядке, который имеет приоритет: тип или местоположение?
  • Что произойдет, если несколько фильтров один и тот же тип объявлен в том же месте? Выполняются ли они в порядке, в котором они определены?

Например, если у меня 6 фильтров, как показано ниже, в каком порядке они будут выполняться?

// FilterConfig.cs
filters.Add(new AuthorizationFilter());
filters.Add(new ActionFilter());

-

// MyController.cs
[AuthorizationFilter2]
[ActionFilter2]
public class MyController
{ 
    [AuthorizationFilter3]
    [ActionFilter3]
    public ActionResult MyAction()
    {
         return foo;
    }
} 
...