ApiController的执行顺序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ApiController的执行顺序相关的知识,希望对你有一定的参考价值。
常见的方法顺序是否有这样的东西?
自从我从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范围,操作顺序如下:
- 调用
ExecuteAsync
的ApiController
方法。 - 调用
Initialize
的ApiController
方法。 - 检索已注册的操作选择器。
- 调用已注册的动作选择器的
SelectAction
方法。如果只匹配一个操作方法,则管道继续。 - 检索所选操作的所有已注册过滤器。
- 授权过滤器被调用。授权过滤器可以决定让管道继续执行还是终止管道。
- 如果授权过滤器未终止请求,则执行操作参数绑定。
ApiController.ModelState
已经确定。- 操作过滤器被调用。 Action Filters可以决定让管道继续执行还是终止管道。
- 如果Action Filters未终止请求,则会检索已注册的Action Invoker。
- 调用已注册的Action Invoker的
InvokeActionAsync
方法来调用所选的action方法。 - 注意:如果从执行授权过滤器到执行操作方法发生任何异常,则会调用异常过滤器。
还有一些事情发生在两者之间,但这非常接近完整的观点。查看ApiController
source code了解更多信息。
以上是关于ApiController的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章