声明:本文是博主整理随笔笔记,仅作为交流参考使用。如有问题,恭迎您的指正
Filter 过滤器
其本质是为了解决面向切面编程、运行在ASP .NET Core管道内的一种机制。
继承各类IFilter创建自己的筛选器方法此处略过不表,可参考微软文档:微软文档->筛选器
多Filter添加及触发顺序
本文 主要记录ASP .NET Core添加多个Filter的顺序与Filter触发顺序的关系,如图:
AIChat认为通过options.Filters.Add<>()添加的Filter顺序就是Filter被触发时执行的顺序,但当我们实际使用时发现Filter的触发顺序似乎并非是和Add<>()添加顺序一致。这时候最直接的就是看看源码中Add<>()做了什么操作导致添加和触发顺序不一致:
到源码中我们看到似乎Add<>()会默认给一个order的属性赋值为0,至此我们似乎可以猜测为何会出现上面说的不一致问题了。
原来使用FilterCollection.Add<>()时添加的Filter默认将order值赋值为0,而Add<>()添加多个Filter时,最后添加的Filter筛选器的order属性值为0。当该类型的Filter触发时,order值为0(即最后被Add<>()添加)的filter会最先被触发。
即:使用FilterCollection.Add<>()添加多个Filter时,后添加的先执行;先添加的后执行
所以如果想控制多个Filter筛选器的执行顺序,可以根据设计的执行顺序在添加时将顺序颠倒。或者使用含有参数order的FilterCollection,Add(int order)添加方法,来手动指定多个Filter的执行顺序。