ApiController的执行顺序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ApiController的执行顺序相关的知识,希望对你有一定的参考价值。

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

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的filter方法之前

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

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

答案

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

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

还有一些事情发生在两者之间,但这非常接近完整的观点。查看ApiController source code了解更多信息。

以上是关于ApiController的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

shell if 语句

在javascript承诺中执行的顺序是什么

scrapy按顺序启动多个爬虫代码片段(python3)

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma

如何获取 ApiController 的所有操作列表

在 ASP MVC 4 (Beta) 中将 DateTime 发布到 ApiController