Asp.net-Web-Api
ApiController 的執行順序
通用方法順序有這樣的東西嗎?
自從我從 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原始碼以獲取更多資訊。