ApiController的执行顺序

时间:2012-09-05 08:23:31

标签: 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)
{
}

在我的AuthorizationFilter的过滤方法之前

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

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

1 个答案:

答案 0 :(得分:37)

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

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

之间还会发生一些事情,但这非常接近完整视图。有关详细信息,请查看ApiController source code