ASP.NET Core 7 源码阅读7:CAR
2023-09-25 23:01:42摘要:一、CAR 1. CAR本质 URL请求----调用Action----生成html响应(或其他响应) CAR就是个普通类---普通方法---最终生成HTML(也可能是其他的) 一个URL,怎么调用的Action---一定是反射----反射创建控制器实例,反射准备方法参数,反射调用Action方法(也许来点优化) 然后生成一段内容(啥都可以),写入到Response里面---然后由Kestrel回发到浏览器----浏览器解析报文做呈现 先Get这个本质,不要被各种封装各种特性看花眼了~ 2. 关键节点-上帝视角 CAR虽然是最后才生效,但是在前面也出现了---全流程debug一下,回顾一下: 启动环节services.AddControllers注册IOC时扫描dll,保存到ApplicationManager 初始化中间件MapControllerRoute()转成ControllerActionDescripter 第一次请求进入,路由初始化DFAMatcher时触发转换成Endpoint,路由匹配找到Endpoint---鉴权授权--- 执行Endpoint时实例化和缓存各种工厂、 Filter等---做好调用准备 执行Filter管道, ActionBegin状态实例化控制器, Bind参数 ActionInside状态开始执行Action,得到ActionResult ResultInside状态开始执行ExecuteResult,得到结果 Controller-Action-Result流程结束 3. CAR源码 按照主流程往后走,先关注Controller,再Action,再Result,其中会有回溯 步骤1: services.AddControllers注册时扫描dll,转成ApplciationPart,保存到ApplciationPartManager 知识点:当前项目引用的dll都算数,所以是独立类库---扩展PartDemo 收集完的内容都是保存在ApplciationPartManager—等于是个中间层,其实就可以开个后门,通过其他方式添加数据进去---所以可以热插拔 甚至可以动态编译脚本---后插拔进去 步骤2:初始化中间件MapControll…… 阅读全文