、Filter 允许在 HTTP 请求的处理管道中的特定位置,插入自定义逻辑
、Filter 一般有同步和异步两种接口,一般使用异步
好处
、主要好处是它们提供了一种将横切关注点(如日志记录、安全性、事务管理等)与业务逻辑分离的方式,从而使代码更加清晰、易于维护和重用
5种类型
、授权过滤器(Authorization Filters):用于确定用户是否有权访问资源,如果未授权,则将管道短路
、资源过滤器(Resource Filters):在模型绑定后但在方法调用之前和之后执行,通常用于处理需要短路请求的场景
、方法过滤器(Action Filters):在方法执行之前和之后执行,它可以用于处理横切关注点,如日志记录、性能监控、输入验证等。
、异常过滤器(Exception Filters):用于处理方法或过滤器中抛出的异常,它提供了一种全局处理异常的方式,允许在一个地方集中处理所有异常
、结果过滤器(Result Filters):在方法结果执行之前和之后执行,它仅在方法运行成功时执行,可以用于修改响应或执行一些需要在响应返回给客户端之前完成的逻辑
、多个类型 Filter 执行顺序:授权 -> 资源 -> 方法 -> 异常 -> 结果
3种注册方式
、全局注册(Global):对整个项目生效
、控制器注册(Controller):对控制器中的所有方法生效
、方法注册(Action):只对方法生效
、同类型多个 Filter 执行顺序:全局 -> 控制器 -> 方法
Action Filter
、在方法执行的之前和之后,会自动执行 Action Filter
、继承 IAsyncActionFilter 接口
、多个 Action Filter 的链式执行:next 方法指向下一个 Action Filter,最后一个 next 则指向 Action,然后再反向执行回来
Exception Filter
、在系统中出现未经处理的异常时,会自动执行 Exception Filter
、继承 IAsyncExceptionFilter 接口
使用步骤
、安装 NuGet 包:Microsoft.AspNetCore.Mvc.Abstractions
、创建筛选器类,继承接口
、实现接口方法,方法参数在执行时,系统会自动传入
、注册 Filter:
– 全局注册:在 Program 中注册 filter 服务,builder.Services.Configure(mopt => { mopt.Filters.Add(); });
– 控制器注册:在控制器上增加特性,[TypeFilter(typeof(MyControllerFilter))]
– 方法注册:在方法上增加特性,[TypeFilter(typeof(MyActionFilter))]
&spm=1001.2101.3001.5002&articleId=131230570&d=1&t=3&u=af1f0764d920448ea341385191a18ff7)
1709

被折叠的 条评论
为什么被折叠?



