如果能理解當一個 Http Request 傳到系統時,該 Request 是如何在系統的生命週期中流竄的,那在開發或是在系統分析與設計時,更可以了解甚麼功能該放在甚麼地方,Debug 時也能更清楚問題發生在哪裡。
今天的內容就來 Run 一下 ASP.NET Core 的生命週期是怎麼跑的。
這裡一一來說明每個框框負責的內容是甚麼:
Middleware 中文譯為中介軟體。
系統收到 Request 時,由多個 Middleware 組成的 Pipeline 進行一連串的處理,而 Pipeline 是「先進後出」的處理順序,如下圖:
目前 Pipeline 中有 3 個 Middleware,Request 會從第 1 個依序送到第 3 個 Middleware。
而傳到第 3 個後,會再回傳到第 2 個,直至最初的 Middleware,回傳期間,可選擇加入其他邏輯執行或是不執行任何事情,所以 Middleware 的順序安排是很重要的。
e.g. 身分權限、驗證功能都可以放在 Middleware,讓 Response 都經過權限、身分判斷後才可進到主程式。
路由,也是一種 Middleware,負責將 Response 對應到預設的路由或是到 Controller 與 Action。
在 .NET 5 中,路由在 Startup.cs
中可以設定(app.UseEndpoints
),並且要注意到,路由的 Code 也是有順序性的,若是先執行了,後續規則就不會執行:
初始化與執行 Controller,將負責把接收到的 Request,判斷該丟去哪一個 Action。
Controller 將 Response 丟到 Action 後,執行該 Action 的內容,並 Return View 或是其他格式的內容到瀏覽器。
呈 Action Method Execution,在將 Response 丟到瀏覽器前,會先判斷要丟的是 View 還是非 View 內容(e.g. Json)等。
ASP.NET Core MVC Request Life Cycle
[鐵人賽 Day07] ASP.NET Core 2 系列 - 路由 (Routing)