首页新闻找找看学习计划

webapi 更改过滤器的执行顺序

0
悬赏园豆:50 [待解决问题]

MVC的actionfilter有Order这个属性可以设置执行顺序,但是webapi没有

调试发现是按名称字母排序来执行的。。

请问如何设置webapi的action过滤器的执行顺序.

GuiltyCrown的主页 GuiltyCrown | 初学一级 | 园豆:104
提问于:2017-08-08 11:21
< >
分享
所有回答(2)
0

Filter的执行顺序

    在使用MVC的时候,ActionFilter提供了一个Order属性,用户可以根据这个属性控制Filter的调用顺序,而Web API却不再支持该属性。Web API的Filter有自己的一套调用顺序规则:

    所有Filter根据注册位置的不同拥有三种作用域:Global、Controller、Action:

通过HttpConfiguration类实例下Filters.Add()方法注册的Filter(一般在App_Start\WebApiConfig.cs文件中的Register方法中设置)就属于Global作用域;

通过Controller上打的Attribute进行注册的Filter就属于Controller作用域;

通过Action上打的Attribute进行注册的Filter就属于Action作用域;

他们遵循了以下规则:

1、在同一作用域下,AuthorizationFilter最先执行,之后执行ActionFilter

2、对于AuthorizationFilter和ActionFilter.OnActionExcuting来说,如果一个请求的生命周期中有多个Filter的话,执行顺序都是Global->Controller->Action;

3、对于ActionFilter,OnActionExecuting总是先于OnActionExecuted执行;

4、对于ExceptionFilter和ActionFilter.OnActionExcuted而言执行顺序为Action->Controller->Global;

5、对于所有Filter来说,如果阻止了请求:即对Response进行了赋值,则后续的Filter不再执行。

 

刘宏玺 | 园豆:14004 (专家六级) | 2017-08-08 11:29
0

参考:http://www.cnblogs.com/CreateMyself/p/4846944.html

金琥 | 园豆:2540 (老鸟四级) | 2017-08-08 15:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册