Spiga

2023年8月的文章归档

ASP.NET Core 7 源码阅读6:Filter

2023-08-20 21:32:52

摘要:一、快速认识Filter 1. 流程衔接点 MVC(Filter+Controller+Action+Result)流程和前面的各种中间件Middleware处理,是如何衔接起来的? Http请求穿过一系列中间件,最终由路由RoutingMiddleware匹配得到RouteEndpoint 在EndpointMiddleware里面会执行其RequestDelegate,委托执行时就是FilterController-Action-Result 该委托在ControllerRequestDelegateFactory里面来构建的,里面通过ControllerActionInvoker来调用 这里有个新名字叫 FilterPipeline 2. 快速认识Filter Filter是MVC里面核心组成部分,有着丰富的种类,交叉的顺序,复杂的嵌套,很有挑战! Filter分2种: 声明特性,实现Filter接口:CustomSimpleShowActionFilterAttributeCustomSimpleShowAsyncActionFilterAttributeCustomSimpleShowDoubleActionFilterAttribute:一个Filter里面既有同步,又有异步,只执行异步!能改参数,能改结果,非常强大注意异步版本的结果修改坑 控制器类实现Filter接口包括Action同步异步-Result同步异步---控制器生效,全部Action都有效 3. AOP面向切面编程 要说Filter,得理解下AOP面向切面编程Aspect Oriented Programming POP面向过程,没有封装没有边界,难以应对复杂需求OOP面向对象,有封装有边界,能应付复杂需求,但原子---类---不容破坏,否则会影响稳定性---开闭原则 AOP能在不破坏封装的前提下,去额外扩展功能比如ActionFilter,啥都没修改,就能增加执行逻辑AOP的好处: 聚焦业务逻辑,轻松扩展功能 代码复用,集中管理 4. 框架中的AOP 现代化开发框架中,要灵活应用AOP面向切面编程思想: ASP.NET Core三层AOP 中间件:离MVC比较远,面向与请求级的事儿 Filter:更贴近MVC,面向单…… 阅读全文