前言
幾年前,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 方法

