初探 ASP.NET MVC 專案執行流程

MVC專案執行的時候,根據預設規則,首先瀏覽器將要求傳送至專案,也就是網址列字串「https://localhost:xxxxx/Home/Index」。(其中的通訊埠編號依環境不同)



專案接收到這個字串,解析字串內容,首先是通訊埠編號之後的 Home,表示要開啟同名字首的控制器檔案 HomeController,接下來比對第二個字串 Index,表示要找到 Index方法,執行其中的內容。



index 方法中, return 這一行程式碼會直接回傳 View() 方法,表示將回傳對應的檢視檔案,這個檔案對應位置是 Home/Index.cshtml ,因此最後我們看到呈現的網頁內容,剛好是其中指定的字串「Hello, MVC!」。

開啟網頁原始碼,如以下圖右方,會看到其中並沒有的HTML內容,與 index.cshtml 幾乎是完全相同的內容,而瀏覽器將其解譯並且呈現出來。



第一行以 @ 開始的一小段程式碼是伺服器端的 MVC Razor 語法,會在伺服器解譯完成送到瀏覽器之前,轉換成為對應的 HTML,這個範例中並沒有作用,後續進行討論。

這是最簡單的 MVC 流程,根據前端傳送來的要求,以控制器為流程的起始點,執行其中的方法,完成輸出,至於MVC是如何解析瀏覽器字串,找到控制器並正確的執行其中的方法,這要從設定檔開始談起。

於專目錄中找到App_Start資料夾,開啟其中的 RouteConfig.cs 這個類別檔,其中的 RegisterRoutes 方法在專案啟動時完成路由組態的設定,也就是 routes.MapRoute 的內容。



其中的 name 是這個配置的識別名稱,Default表示其為預設配置,接下來的 url 則是網址列的解析格式,以倒斜線分割為三個區段:

/{controller}/{actionName}/{id}

controller 是控制器檔案類別名稱去掉 Controller 字尾的識別字串,而 actionName 則是方法名稱,id則是要傳入的參數。

接下來的 defaults 則是指定各區段未指定值的時候,要如何找到執行控制器,缺少 controller 則預設找名稱為 Home 的控制器,缺少 action 則找 index ,最後的 id 指定為 UrlParameter.Optional,表示這是一個選擇性的參數,可以不用指定。

回到執行 MVC 專案執行的網頁,重新調整其中的網址列:



這一行網址 http://localhost:xxxxx/ 完全沒有 controller、actionName 以及 id 區段,因此會以預設值為依據,因此嘗試尋找 HomeController 控制器,並尋找其中的 Index 方法,執行完成後輸出結果。

回到上述的範例,當輸入 http://localhost: xxxxx /Home,它會找到 HelloController 這個控制器類別,然後執行 Index() 這個預設方法,效果與明確指定為 http://localhost:xxxxx/Home/index所得到的結果相同,例如以下的截圖:



路由組態是進入MVC的第一個關卡,瞭解這裏的討論,接下來就可以開始嘗試學習如何在MVC建立真正的網路內容,這是檢視檔案的議題。


沒有留言: