Asp.Net Core 轻松学-被低估的过滤器 (4)

应用方式非常简单,就像使用普通过滤器一样对控制器进行特性标记即可
所不同的是,这里使用的是 MiddlewareFilter 进行注册 RegisterManagerPipeline
管道式过滤器的优先级非常高,甚至比授权过滤器的优先级还高,在使用的时候需要特别注意应用场景

8. 过滤器的执行顺序

相同类型的过滤器其执行顺序可以使用 Order 字段进行指定,该值为一个 int32 类型,值越小表示优先级越高,该值只能作用于相同类型的过滤器
比如,定义了两个 ActionFilter ,UserNameActionFilter,UserAgeActionFilter,分别制定其 Order 字段值为 10,5,那么 UserAgeActionFilter 将会在调用 ,UserNameActionFilter 之前执行
但是,即使指定了 Order ,ActionFilter 的执行优先级也不会超越授权管理器 AuthorizeAttribute,这是设计上的不同

8.1 Order 演示代码

[HttpPost] [UserNameActionFilter(Order = 10)] [UserAgeActionFilter(Order = 5)] public void Post([FromBody] UserModel value) { }

8.2 输出结果

Asp.Net Core 轻松学-被低估的过滤器

上图输出的黄色部分文字清晰的说明了过滤器的执行顺序
显示执行了资源过滤器,接着执行了 Order=5 的 UserAgeActionFilter ,最后执行了 Order=10 的 UserNameActionFilter 过滤器
可以看到,虽然操作过滤器设置了 Order=5,但其执行优先级仍然不能超越授权过滤器,甚至无法超越资源过滤器

结束语

本文简单介绍了 Asp.Net Core 下系统内置的各种各样的过滤器,分别是

授权过滤器 AuthorizeAttribute

资源过滤器 IResourceFilter

异常过滤器 IExceptionFilter

操作过滤器 ActionFilterAttribute

结果过滤器 IResultFilter

还通过一些简单说实例演示了过滤器的执行过程

最后介绍了如何在过滤器中使用中间件,以及对过滤器的执行顺序进行了详细的演示

演示代码下载

https://files.cnblogs.com/files/viter/Ron.FilterDemo.zip

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjxpp.html