ASP.NET Core 網站生命週期

ASP.NET MVC 是一個網站服務,使用者輸入網址後,顯示網頁到使用者的瀏覽器上面,而生命週期就是在解釋當使用者輸入網址之後,背後運行的流程,中間經過哪些事件,最後把網頁呈現出來的過程。

理解 ASP.NET MVC 的生命週期就可以同時理解網站的運行機制,大多數的網站生命週期都是類似的,而 MVC 是一個適合專責分工的架構,從生命週期的角度更能了解 MVC 運行的過程。

在 ASP.NET MVC 上有兩個主要的生命週期:

應用程式生命週期 請求生命週期 我剛剛所講述的使用者輸入網址到呈現網頁,這是請求的生命週期,主要觸發點是使用者在瀏覽器上發出請求而啟動的。 另一個應用程式的生命週期,指的是網站服務的運作機制,從架設網站啟動服務開始,等待使用者請求,到最後結束應用程式,這是網站底層運作的生命週期。

目錄

應用程式生命週期介紹 請求生命週期介紹

## 應用程式生命週期介紹ASP.NET MVC 是運行在 .NET Framework 架構之上,在 .NET Framework 有一個 Web 基礎類別 HttpApplication 定義了共有的方法、屬性和事件,同時負責分發請求事件,而 HttpApplication 也是 WebForm 的基礎類別,可以說 HttpApplication 類別是整個 ASP.NET MVC 與 WebForm 架構的核心。應用程式生命週期在啟動後會執行一個 Application_Start() 方法,然後就一直等待使用者請求,當請求來時會啟動對應的事件觸發,結束請求後就會繼續等待下一個請求到來,直到結束應用程式。用一張圖來表達應用程式生命週期。 Img 在 MVC 專案內有一檔案 Global.asax 裡面有最初始的應用程式生命週期事件: Application_Start() Img2Application_Start() 事件內載入了 Area, Filter, Route 與 Boundle 這 4 種註冊表在 ASP.NET MVC 服務內。 除了 Application_Start() 之外,還有另外 19 個請求事件可以使用。 以下的事件名稱會依照請求發生時依此順序執行。使用事件的方式就是創建一方法,方法命名規則為 Application_{事件名稱},例如: img3 如果你有額外的邏輯要處理,就可以建立這些請求事件來執行額外的功能。請求生命週期介紹請求生命週期指的是 MVC 的運作機制,從使用者在瀏覽器上輸入網址發出請求開始,執行 Routing 解析網址,然後呼叫對應的 Controller 來處理請求,中間啟動 Action 服務到最後呈現網頁到瀏覽器的過程。用一張圖來表達這樣的流程。 img4MVC 指的是 Model – Controller – View 這三層架構,是一種權責分離的架構,不同層級處理不同的工作。 當請求發生時第一個會啟動 Routing 來解析請求,我們在 Application_Start() 裡面看到會載入 Route 註冊表 RouteConfig.RegisterRoutes(RouteTable.Routes);img5 而 Route 註冊表預設放在 \App_Start\RouteConfig.cs 裡面。 這裡面寫了 Route 的規則,也就是解析網址的規則,第一個路徑指的是 Controller,第二個路徑是 Action ,第三個就是參數值。img6 在 Route 內的目的就是解析要負責處理的 Controller 是那一個。Controller 是 MVC 的起始入口,Action 是 Controller 內的方法,過程中從 Model 讀取資料,最後產生 View 頁面回傳到使用者的瀏覽器。我用一張圖來描述 MVC 內會使用到的類別名稱。 img7MVC 整體流程是照著箭頭在走的,圖片寫了各種在 MVC 架構內的類別名稱和事件名稱,大多可以在 MVC 的底層內找到對應的程式碼。而我們在寫 MVC 程式時,主要的入口程式碼會寫在 Action 裡面。 我們建立 MVC 專案時,預設首頁的 Action 就在 HomeController 的 Index() ,在處理 Action 的過程中有必要時會載入 Model 物件,最後完成時 Return View() 也就是結束 Action 事件,轉交 Result 來處理呈現結果。Result 依需求可能會載入 View 頁面也可能直接輸出文字就不載入 View 頁面。在 Action Execution 裡面看到的 Filter 這是過濾器的機制,如果 Action 或 Controller 有啟用過濾器 (Filter) 就會依照箭頭的順序來執行。

Last updated