应用方式非常简单,就像使用普通过滤器一样对控制器进行特性标记即可
所不同的是,这里使用的是 MiddlewareFilter 进行注册 RegisterManagerPipeline
管道式过滤器的优先级非常高,甚至比授权过滤器的优先级还高,在使用的时候需要特别注意应用场景
相同类型的过滤器其执行顺序可以使用 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 输出结果
上图输出的黄色部分文字清晰的说明了过滤器的执行顺序
显示执行了资源过滤器,接着执行了 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