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方法被调用。如果仅匹配一种操作方法,则流水线继续。
  • 检索所选操作的所有已注册过滤器。
  • 授权过滤器被调用。授权过滤器可以决定让管道继续执行或终止管道。
  • 如果授权过滤器没有终止请求,则执行操作参数绑定。
  • ApiController.ModelState已设置。
  • 调用动作过滤器。Action Filters 可以决定是让管道继续执行还是终止管道。
  • 如果 Action Filters 没有终止请求,则检索注册的 Action Invoker。
  • 调用已注册的 Action Invoker的InvokeActionAsync方法来调用选定的操作方法。
  • 注意:如果从 Authorization Filters 的执行到 action 方法的执行发生任何异常,则调用异常过滤器。

中间还有一些事情发生,但这非常接近一个完整的视图。查看ApiController源代码以获取更多信息。

于 2012-09-05T09:53:05.947 回答