Подтвердить что ты не робот

Порядок выполнения для ApiController

Есть ли что-то подобное для обычного метода?

http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-38-WebApiStackDiagramsNew/6428.ASP.NET_5F00_MVC4_5F00_WebAPI_5F00_StackDiagram_5F00_Future.jpg

У моего решения Web Api теперь есть новый порядок выполнения некоторых методов, так как я обновил версию Beta/RC до версии RTM. (Это не обратный порядок выполнения обработчика сообщений)

Ранее этот метод APIControllers был вызван:

protected override void Initialize(System.Web.Http.Controllers.HttpControllerContext controllerContext)
{
}

Перед фильтрами метода моего AuthorizationFilter

public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
}

После RTM функция OnAuthorization вызывается до Initialize(). Есть ли информация о порядке выполнения методов ApiController и изменениях после релиза RTM?

4b9b3361

Ответ 1

Предполагая, что запрос входит в область ApiController, порядок операций выглядит следующим образом:

  • Вызывается ExecuteAsync метод ApiController.
  • Вызывается метод Initialize ApiController.
  • Получается зарегистрированный селектор действий.
  • Вызывается метод SelectAction зарегистрированного селектора действий. Если согласован только один метод действия, трубопровод продолжается.
  • Все зарегистрированные фильтры для выбранного действия будут восстановлены.
  • Вызываются авторизационные фильтры. Фильтр авторизации может решить, разрешить конвейеру продолжать выполнение или завершить конвейер.
  • Если фильтры авторизации не завершили запрос, выполняются привязки параметров действия.
  • ApiController.ModelState.
  • Вызывается действие фильтра. Фильтры действий решают либо позволить конвейеру продолжать выполнение или завершение работы конвейера.
  • Если Action Filters не завершили запрос, будет восстановлен зарегистрированный Action Invoker.
  • Метод InvokeActionAsync зарегистрированного Action Invoker вызывается для вызова выбранного метода действий.
  • Примечание. Если из выполнения фильтров авторизации возникает какое-либо исключение для выполнения метода действия, вызывается фильтр исключений.

Есть еще несколько вещей, которые происходят между ними, но это очень близко к полному виду. Подробнее читайте ApiController исходный код.