1.筛选器介绍
筛选器的用途和中间件功能很相似,都可以对请求前后执行自定义逻辑。中间件的作用范围是整个请求管道,筛选器的作用范围更加灵活,可以作用于控制器、操作方法、全局范围或特定范围。可以创建自定义筛选器,用于处理横切关注点。 横切关注点的示例包括错误处理、缓存、配置、授权和日志记录。 筛选器可以避免复制代码。 例如,错误处理异常筛选器可以合并错误处理。
2.筛选器作用原理
如图所示,筛选器管道在 ASP.NET Core 选择了要执行的操作之后运行,筛选器作用于方法执行前后
3.筛选器的用途
- 在终结点处理程序前后运行代码。
- 检查和修改终结点处理程序调用期间提供的参数。
- 截获终结点处理程序的响应行为。
4.筛选器的定义
// 筛选器的同步实现 public class SampleActionAttribute :Attribute, IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // 调用操作方法之前执行自定义逻辑 } public void OnActionExecuted(ActionExecutedContext context) { // 调用操作方法返回之后执行自定义逻辑 } } // 筛选器的异步实现 public class SampleAsyncAttribute : Attribute,IAsyncActionFilter { public async Task OnActionExecutionAsync( ActionExecutingContext context, ActionExecutionDelegate next) { // 调用操作方法之前执行自定义逻辑 await next(); // 调用操作方法返回之后执行自定义逻辑 } }
4.筛选器的使用
//简单使用 [SampleAction] public class ControllerFiltersController : Controller { // ... } //控制全局筛选器的执行顺序为首先使用 [SampleAction(Order = int.MinValue)] public class ControllerFiltersController : Controller { // ... }
5.筛选器的作用域和执行顺序
当管道的某个特定阶段有多个筛选器时,作用域可确定筛选器执行的默认顺序。 全局筛选器涵盖类筛选器,类筛选器又涵盖方法筛选器。
顺序号 | 筛选器作用域 | 筛选器方法 |
---|---|---|
1 | 全局 | OnActionExecuting |
2 | 控制器 | OnActionExecuting |
3 | 方法 | OnActionExecuting |
4 | 方法 | OnActionExecuted |
5 | 控制器 | OnActionExecuted |
6 | 全局 | OnActionExecuted |
6.内置筛选器属性
- ActionFilterAttribute
- ExceptionFilterAttribute
- ResultFilterAttribute
- FormatFilterAttribute
- ServiceFilterAttribute
- TypeFilterAttribute
参考资源:
正文完