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