13

共通のメソッドの順序については、このようなものはありますか?

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 リリース後の変更に関する情報はありますか?

4

1 に答える 1

38

リクエストが ApiController スコープに入ると仮定すると、操作の順序は次のようになります。

  • ExecuteAsyncメソッドApiControllerが呼び出されます。
  • InitializeメソッドApiControllerが呼び出されます。
  • 登録されたアクションセレクターを取得します。
  • SelectAction登録されたアクションセレクターのメソッドが呼び出されます。一致するアクション メソッドが 1 つだけの場合、パイプラインは続行されます。
  • 選択したアクションに登録されているすべてのフィルターが取得されます。
  • 認可フィルターが呼び出されます。承認フィルターは、パイプラインの実行を継続するか、パイプラインを終了するかを決定できます。
  • 承認フィルターが要求を終了しなかった場合、アクション パラメーターのバインディングが実行されます。
  • ApiController.ModelStateが設定されています。
  • アクション フィルタが呼び出されます。アクション フィルターは、パイプラインの実行を継続するか、パイプラインを終了するかを決定できます。
  • Action Filters が要求を終了しなかった場合、登録された Action Invoker が取得されます。
  • 登録された Action InvokerのInvokeActionAsyncメソッドが呼び出され、選択したアクション メソッドが呼び出されます。
  • 注: 認可フィルターの実行からアクション メソッドの実行までに何らかの例外が発生した場合、例外フィルターが呼び出されます。

その間に発生することがいくつかありますが、これは完全なビューに非常に近いものです。ApiController詳細については、ソース コードを確認してください。

于 2012-09-05T09:53:05.947 に答える