代码改变世界

【多图,谨慎打开】深入研究 Mini ASP.NET Core(迷你 ASP.NET Core),看看 ASP.NET Core 内部到底是如何运行的

2019-04-27 00:51 by 音乐让我说, ... 阅读, ... 评论, 收藏, 编辑

前言

几年前,Artech 老师写过一个 Mini MVC,用简单的代码告诉读者 ASP.NET MVC 内部到底是如何运行的。当时我研究完以后,受益匪浅,内心充满了对 Artech 老师的感激,然后用我自己理解的 MVC 知识,写了一篇 深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的 ,写完更加加深了我对 ASP.NET MVC 的理解。今天 ASP.NET Core 已经更新到 3.0 Preview 4 了(今天是:2019-04-26 星期五晚上),同时 Artech 老师也发布了 Mini ASP.NET Core,故决定下载下来,反复调试跟踪,看看  ASP.NET Core 到底是如何运行的。

 

介绍

目前笔者时间不是很充分,文字的说明也许需要未来逐步去完善,本文章未来也会随时更新。目前截图中包含了一部分我自己的理解,还请见谅。下面正式开始。

 

1. Main 方法

 

2. WebHostBuilder 构造函数

 

3. IWebHostBuilder 的扩展方法 - UseHttpListener

 

4. HttpListenerServer 构造函数

 

5. 回到 IWebHostBuilder 的扩展方法

 

6. WebHostBuilder 的 UseServer 方法

 

7. 回到 IWebHostBuilder 的扩展方法

 

8. 回到 Main 方法

 

9. WebHostBuilder 的 Configure 方法

 

10. 回到 Main 方法

 

11. WebHostBuilder 的 Build 方法

 

12. ApplicationBuilder 构造函数

 

13. 回到 WebHostBuilder 的 Build 方法

 

14. 回到 Main 方法

 

15. ApplicationBuilder 的 Use 方法

 

 

16. 回到 Main 方法

 

17. 再次回到 WebHostBuilder 的 Build 方法

 

18. ApplicationBuilder 的 Build 方法

 

19. WebHost 构造函数

 

20. 再次回到 WebHostBuilder 的 Build 方法

 

21. 回到 Main 方法

 

22. WebHost 的 StartAsync 方法

 

23. HttpListenerServer 的 StartAsync 方法

 

 

==========================华丽的分割线==========================================

 

 

==========================华丽的分割线==========================================

 

24. HttpListenerFeature 的构造函数

 

25. IFeatureCollection 的扩展方法 - Set 方法

 

26. 回到 HttpListenerServer 的 StartAsync 方法

 

27. HttpContext、HttpRequest、HttpResponse

 

28. 再次回到 HttpListenerServer 的 StartAsync 方法

 

29. 回到 ApplicationBuilder 的 Build 方法

由于第 18 步只返回了一个委托(匿名方法的签名),并没有执行委托,这一步就是执行这个委托。

 

 

30. 执行中间件(FooMiddleware、BarMiddleware、ProductMiddleware)委托链中的 FooMiddleware

 

31. 再次回到 ApplicationBuilder 的 Build 方法

 

32. 执行中间件(FooMiddleware、BarMiddleware、ProductMiddleware)委托链中的 FooMiddleware Next

这一步 FooMiddleware 内部的 Response.WriteAsync 已经执行完毕,接着调用了 next 委托,向下执行。

 

 

33. HttpResponse 的 WriteAsync 方法