【源码解读】asp.net core源码启动流程精细解读

流程,精细,core,源码 · 浏览次数 : 2528

小编点评

**asp.net core源码解读** **引言** 本文将深入介绍一个默认的WebApi项目如何启动,监听,以及请求过来,如何响应并写入数据。文章将提供代码的详细注释,帮助读者理解代码的功能和逻辑。 **整体目录** * **WebApplication** * **WebApplicationBuilder** * 构造函数中执行一些初始化操作 * **构造函数** * 创建应用程序配置 * 注册路由 * **Build方法** * 将中间件串联起来 * 返回一个IHost对象,表示应用程序启动的端口 * **MapControllers** * 为EndpointDataSource添加Endpoint * 订阅更新Endpoint的变化 **代码解析** **1. WebApplication** * **WebApplicationBuilder**:创建应用程序配置对象,包括应用程序名称、启动路径等信息。 * **构造函数**:实例化应用程序配置对象,并调用其构造方法。 **2. Build方法** * **中间件串联**:使用Middleware集合来将中间件连接起来。 * **返回IHost对象**:应用程序启动时,创建GenericWebHostBuilder,并将其构建为GenericWebHostService,最终返回IHost对象。 **3. MapControllers** * 为EndpointDataSource添加Endpoint,并将它绑定到Controller的特定方法上。 * 订阅更新Endpoint的变化,并在变化时调用相应的响应方法。 **4. 控制器和接口** * 创建控制器,并调用接口的操作。 * 使用RequestDelegate和ResourceInvoker对请求进行处理。 **5. 监听** * 使用Kestrel监听指定的端口,并创建一个EventLoop,处理来自客户端的请求。 **6. 代码示例** 以下是一个示例代码片段,展示了如何使用Middleware来实现跨域请求: ```csharp app.UseMiddleware(); ``` **结论** 通过阅读本文档,读者可以了解如何使用微软的ASP.NET Core框架开发应用程序。了解代码的结构和逻辑可以帮助开发者更深入地理解框架的使用。

正文

引言

    core出来至今,已经7年了,我接触也已经4年了,从开始的2.1,2.2,3.1,5,6再到如今的7,一直都有再用,虽然我是一个Winform仔,但是源码一直从3.1到7都有再看,然后在QQ上面也一直比较活跃,之前好几年前一直说给大家解读asp.net core源码,在之前的博客中,讲的都是比较粗略化的,因为东西太多了,写也写不少东西,所以总是不了了之,然后在上个月底的时候,在微信和群友聊天,说到了这块,就想着,直播讲解一下,然后就定在了五月份去讲解源码,然后在前天,也就是五月十八号,在微信直播,哔哩哔哩录制,讲解了一下asp.net core源码,不过,由于很少直播,导致整个直播效果不是很好,因为整个节奏都是按照我自己对源码的熟悉程度来解读的,以及源码太多,我想一次性讲解完,所以导致后面的观众很少,在这向诸位观众道个歉,然后昨天,我就开始对前天晚上的直播做了总结,以及把我本来计划没有说的话,写在了一个文档里,其中包括对于直播的总结,以及开发者如何提升自己的认知还有逻辑思维能力,以及自己的一些建议,同时在昨天也开始整理asp.net core源码的解读文档,从昨天写到现在,终于写完了,希望接下来分享的东西对大家能够有帮助。

目录

    整体目录分为以下目录,从最开始的WebApplication,WebApplicationBuilder,在到WebApplicationBuilder内部的构造函数做了那些事情,每一步尽量做到了精细化,每一行代码能讲清楚就讲清楚,同时针对默认创建的Api项目的重要的几个源码做了精细化讲解,包括AddControllers,内部的AddMvcCore,注入的那么多的服务,在到如何创建GenericWebHostBuilder,构建GenericWebHostService,注入Kestrel,IIS等,配置服务,配置Host还有Configuration。

    再到WebApplication的Build方法,又如何把所有的中间件串联起来,做了哪些事情,返回的IHost是什么,在哪里,也写了MapControllers如何给EndpointDataSource添加Endpoint,如何订阅更新Endpoint的变化。又如何创建我们的请求的RequestDelegate,以及ResourceInvoker,如何执行过滤器,创建控制器,调用接口,如何请求,如何响应,以及最根本的监听,都写在了本文档里,总之把我认为最细致化的东西都给大家呈现了出来,哈哈哈当然拉,在最后的写入响应那块,实际上有的不是很详细,因为,源码跳的地方有点多,我把中间WriteAsync我认为承上启下的部分写了出来,方便大家去找到最根本的地方,

    本文档,将一个默认的WebApi项目如何启动,如何监听,以及请求过来,如何响应并且写入数据,展现出来,有的地方可以支持自定义的接口类型,也说了出来,同时相信大家,在看了本文档,再结合源码,能够很清晰的知道,自己如果需要自定义一些东西,是可以明白源码在哪里看,实现哪些接口,生命周期又是什么,如果在结合微软文档,知道了一些可以自定义的某个功能IFeature,都是可以的。

    希望大家,都能够对asp.net core源码有一个更深层次的了解,一个框架我们不仅仅是会用,还得用的好,才能提升我们的竞争力。

结尾

    最后,恳求各位大家在转载本文档的时候,能够保留文档最后的个人信息,尊重一下本人的版权,谢谢大家,码字不易,望各位理解,后续,会给大家带来更多的源码解读。

    直播总结文档地址:里面包括个人的一些心得建议,以及提升认知的方法。

    链接:https://pan.baidu.com/s/10GpglK3zhrOEsOMzIXcwjQ
    提取码:bpsz

    asp.net core源码解读文档,就是如图上的文档,

    链接:https://pan.baidu.com/s/1V5wUD2R0WMQ8hOHulhQnHA
    提取码:p2a8

    所阅读的asp.net core源码地址

    链接:https://pan.baidu.com/s/15a16TNowbpatkJqDF8qk1A
    提取码:k7oh

    所阅读的Libraries源码地址

    链接:https://pan.baidu.com/s/1cy_5C3cwn9TQXqFjKUvWgQ
    提取码:afeo

    直播回放:

    【asp.net core源码快速解读-哔哩哔哩】 https://b23.tv/G8p6j9D

    最后如果有什么问题可以随时联系我,QQ934550201,或者添加群聊都可以找到我。

    

  

 

与【源码解读】asp.net core源码启动流程精细解读相似的内容:

【源码解读】asp.net core源码启动流程精细解读

引言 core出来至今,已经7年了,我接触也已经4年了,从开始的2.1,2.2,3.1,5,6再到如今的7,一直都有再用,虽然我是一个Winform仔,但是源码一直从3.1到7都有再看,然后在QQ上面也一直比较活跃,之前好几年前一直说给大家解读asp.net core源码,在之前的博客中,讲的都是比

Asp .Net Core 系列:详解鉴权(身份验证)以及实现 Cookie、JWT、自定义三种鉴权 (含源码解析)

什么是鉴权(身份验证)? https://learn.microsoft.com/zh-cn/aspnet/core/security/authentication/?view=aspnetcore-8.0 定义 鉴权,又称身份验证,是确定用户身份的过程。它验证用户提供的凭据(如用户名和密码)是否有

【源码解读(一)】EFCORE源码解读之创建DBContext查询拦截

引言 在网上很少看到有关于系统讲解EFCore源码的,可能大概也许是因为EFCore的源码总体是没有asp.net web的源码流程清晰,正如群友所说,EFCore的源码大致看起来有点凌乱,与其说凌乱,不如说是没有一个好的方向;然后昨天在群里有一个朋友再说,EfCore的拦截器如何注入Web的服务,

.NET8 Identity Register

分享给需要帮助的人:记一次 IdentityAPI 中注册的源码解读:设置用户账户为未验证状态,以及除此之外更安全的做法: 延迟用户创建。包含了对优缺点的说明,以及适用场景。 在ASP.NET 8 Identity 中注册API的源码如下: routeGroup.MapPost("/register

微软GraphRAG框架源码解读

两个月前,微软发布了GraphRAG的论文,基于知识图谱技术改进查询聚焦摘要(QFS)任务的问答。7月2日,微软正式官宣GraphRAG项目开源,短短一周破8K星。相信不少小伙伴已经开始着手分析项目的代码和文档了,这里奉上外网薛同学新鲜出炉的源码解读文章,以飨读者。

LLaMA 3 源码解读-大语言模型5

title: llama3源码解读 tags: DL 本来不是很想写这一篇,因为网上的文章真的烂大街了,我写的真的很有可能没别人写得好。但是想了想,创建这个博客就是想通过对外输出知识的方式来提高自身水平,而不是说我每篇都能写得有多好多好然后吸引别人来看。那作为对整个合集内容的完善,这篇博客会解析现在

6. 用Rust手把手编写一个wmproxy(代理,内网穿透等), 通讯协议源码解读篇

用Rust手把手编写一个wmproxy(代理,内网穿透等), 通讯协议源码解读篇 项目 ++wmproxy++ gite: https://gitee.com/tickbh/wmproxy github: https://github.com/tickbh/wmproxy 事件模型的选取 OS线程,

C++ 测试框架 GoogleTest 初学者入门篇 丙

本文上接 C++ 测试框架 GoogleTest 初学者入门篇 系列第三篇,也是最后一篇了,源码解读级别!

Intellij IDEA 插件开发

很多idea插件文档更多的是介绍如何创建一个简单的idea插件,本篇文章从开发环境、demo、生态组件、添加依赖包、源码解读、网络请求、渲染数据、页面交互等方面介绍,是一篇能够满足基本的插件开发工程要求的文章。

Junit执行器Runner探索之旅

单元测试是每个程序员必备的技能,而Runner是每个单元测试类必有属性。本文通过解读Junit源码,介绍junit中每个执行器的使用方法,让读者在单元测试时,可以灵活的使用Runner执行器。