Asp.net-Web-Api

ApiController 的執行順序

  • March 1, 2018

通用方法順序有這樣的東西嗎?

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

自從我從 Beta/RC 版本升級到 RTM 版本以來,我的 Web Api 解決方案現在在執行某些方法方面有了新的順序。(它不是消息處理程序執行的相反順序)

之前呼叫了 APIControllers 的這個方法:

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

在我的 AuthorizationFilter 的 filtermethods 之前

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

在 RTM 之後,在 Initialize() 之前呼叫 OnAuthorization。是否有一些關於 ApiController 方法的執行順序和 RTM 發布後的變化的資訊?

假設請求進入 ApiController 範圍,操作順序如下:

  • ExecuteAsync方法ApiController被呼叫。
  • Initialize方法ApiController被呼叫。
  • 檢索註冊的動作選擇器。
  • 註冊的動作選擇器的SelectAction方法被呼叫。如果僅匹配一種操作方法,則流水線繼續。
  • 檢索所選操作的所有已註冊過濾器。
  • 授權過濾器被呼叫。授權過濾器可以決定讓管道繼續執行或終止管道。
  • 如果授權過濾器沒有終止請求,則執行操作參數綁定。
  • ApiController.ModelState已設置。
  • 呼叫動作過濾器。Action Filters 可以決定是讓管道繼續執行還是終止管道。
  • 如果 Action Filters 沒有終止請求,則檢索註冊的 Action Invoker。
  • 呼叫已註冊的 Action Invoker的InvokeActionAsync方法來呼叫選定的操作方法。
  • 注意:如果從 Authorization Filters 的執行到 action 方法的執行發生任何異常,則呼叫異常過濾器。

中間還有一些事情發生,但這非常接近一個完整的視圖。查看ApiController原始碼以獲取更多資訊。

引用自:https://stackoverflow.com/questions/12277293