Net6 请求管道处理
1 new WebHostBuilder ,并传入 IHostBuilder 和 ApplicationBuilder 并初始化 , 执行委托 创建HttpListenerServer 服务,没有则返回默认 监听地址,
注册中间件,获取监听地址, 遍历 生成管道 对象 requestDelegate 生成时 // 执行了 注册的 中间件。
创建 并返回WebHostedService (传入 监听地址 和 生成requestDelegate ),
并启动 Run方法,官方源码中通过 IServiceProvider获取 IEnumerable<IHostedService> 然后遍历 调用start方法 启动 ,遍历监听地址添加到 HttpListener监听中 启动监听
然后请求监听地址,获取监听 请求的对象 HttpListenerContext, HttpListenerFeature 将 HttpListenerContext 传入 转为 HttpListenerFeature 。(HttpListenerFeature 作为一个适配,或者中间厂商转化,实现接口 IHttpRequestFeature, IHttpResponseFeature)
创建 FeatureCollection (一个 字典 对象 Dictionary<Type, object?>,
在 将 HttpListenerFeature 通过 set 传入 FeatureCollection中,通过set的泛型<IHttpRequestFeature, IHttpResponseFeatur>和传入 的HttpListenerFeature 对应
并存入字典,
然后返回 IFeatureCollection 传入new HttpContext对象, (new HttpRequest 对象 和一个 HttpResponse) 和刚刚 set 一样,通过字典的 trygetvalue 配合 泛型在取出
返回 生成 HttpRequest和HttpResponse) ,生成HttpContext, 独对象
然后 作为参数 传入 管道 继续执行 注入的中间件 和返回
承载 服务
WebHostedService
承载服务帮助类,帮助 WebHostedService 生成 Iserver 和 requestDelegate 管道的生成
WebHostBuilder
1 2 3 4 5 6 7 | 代码<br> var webHostBuilder = new WebHostBuilder(builder, new ApplicationBuilder()); configure?.Invoke(webHostBuilder); builder.ConfigureServices(svcs => svcs.AddSingleton<IHostedService>(provider => { var server = provider.GetRequiredService<IServer>(); var handler = webHostBuilder.ApplicationBuilder.Build(); //此处将注入的中间件 生成为管道requestDelegate return new WebHostedService(server, handler); })); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2022-05-23 Netcore+iis 部署后seesion 丢失