ApiController的执行顺序

use*_*899 12 asp.net-web-api

常见的方法顺序是否有这样的东西?

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)
{
}
Run Code Online (Sandbox Code Playgroud)

在我的AuthorizationFilter的filter方法之前

public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
}
Run Code Online (Sandbox Code Playgroud)

在RTM之后,在Initialize()之前调用OnAuthorization.是否有关于ApiController方法的执行顺序和RTM发布后的更改的一些信息?

tug*_*erk 37

假设请求进入ApiController范围,操作顺序如下:

  • 所述ExecuteAsync的方法ApiController被调用.
  • 所述Initialize的方法ApiController被调用.
  • 检索已注册的操作选择器.
  • SelectAction调用已注册的动作选择器的方法.如果只匹配一个操作方法,则管道继续.
  • 检索所选操作的所有已注册过滤器.
  • 授权过滤器被调用.授权过滤器可以决定让管道继续执行还是终止管道.
  • 如果授权过滤器未终止请求,则执行操作参数绑定.
  • ApiController.ModelState 已设定.
  • 操作过滤器被调用.Action Filters可以决定让管道继续执行还是终止管道.
  • 如果Action Filters未终止请求,则会检索已注册的Action Invoker.
  • InvokeActionAsync调用已注册的Action Invoker 的方法以调用所选的action方法.
  • 注意:如果从执行授权过滤器到执行操作方法发生任何异常,则会调用异常过滤器.

还有一些事情发生在两者之间,但这非常接近完整的观点.查看ApiController源代码以获取更多信息.

  • 这就是为什么OperationHandlers真的很酷.真是一团糟. (3认同)