MVC - Controller 的部份

ASP.NET Core Web 應用開發–使用 MVC 框架 / PART I MVC 入門 / MVC - Controller 的部份

在「要求與回應」一節討論了MVC從瀏覽器送出要求,到最後回應檢視的過程,而控制器是其中的關鍵,負責要求與回應的接收與傳送,控制器是類別檔案,以「HomeController.cs」為例,將其開啟,來看看其類別定義:


如截圖中的箭頭標示,控制器類別繼承Controller類別,類別本身的命名以 Controller 作為字尾。

Controller 類別是位於 Microsoft.AspNetCore.Mvc 命名空間的基底類別,其中定義大量的方法,支援針對MVC網站傳送的要求,進行對應的回應作業。

以下微軟的技術文件公開的 Controller 類別規格網頁,可以查詢 Controller 類別的成員清單,如果需要的話可以自行前往。

https://docs.microsoft.com/zh-tw/dotnet/api/microsoft.aspnetcore.mvc.controller?view=aspnetcore-5.0

控制器類別在執行的過程中,配置處理要求與回應所需的環境,協調並控制其中的流程,而實際處理回應的則是各種動作方法,這一類的方法具有 IActionResult 回傳型別,這是位於 Microsoft.AspNetCore.Mvc 命名空間的介面,定義動作方法最後執行結果物件所需的共同規格,回傳的物件類別都必須實作這個介面,以下是規格網頁:

https://docs.microsoft.com/zh-tw/dotnet/api/microsoft.aspnetcore.mvc.iactionresult?view=aspnetcore-5.0

進入網頁可以看到IActionResult底下有一定數量的衍生類別,包含 ActionResult 、ContentResult 或是 ViewResult 等等,動作方法根據需求回傳其中任何一種類別實體物件。

回到動作方法 Index :

public IActionResult Index()
{
    return View();
}

最後 return View() 這一行敘述,其中 View() 是 Controller 類別定義的方法,因此繼承Controller的任何控制項類別都可以直接呼叫,查詢上述提及的 Controller 類別規格頁,進入 View() 規格頁:

方法的傳回值是 ViewResult 型別物件,這裏可以從上述的說明解到 - ViewResult 型別實作 IActionResult 介面,是動作方法支援回傳的型別之一,而 ViewResult 類別的功能主要便是將檢視內容轉換的結果 – HTML 傳送至回應中。 稍微整理上述的說明,回到控制器內容:

這張載圖從最上方開始,為了支援控制器的功能,一開始控制器類別必須引用 Microsoft.AspNetCore.Mvc 空間,然後繼承 Controller 類別,而動作方法,無論預設 Index() 或是自訂的 HelloView() 均定義為 IActionResult 型別,執行完畢之後,執行基底類別 Controller 定義的方法 View() ,生成 IActionResult 型別衍生的 ViewResult 物件, return 關鍵字則將其回傳。

沒有留言:

熱門點閱