動作方法與 ActionResult

ASP.NET Core Web 應用開發–使用 MVC 框架 / PART II MVC 的細節 / 動作方法與 ActionResult

考慮以下的動作方法 Index() :

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

其中被宣告為 ActionResult類別型態,而 return View() 回傳的檢視檔案因此必須是一個 實作 IActionResult 介面實體物件,最後轉換成為對應的HTML內容,這是本書到目前為止示範MVC範例的執行流程,事實上動作方法不一定要回傳網頁,考慮以下的配置:

public IActionResult ResponseHello()
{
    return Content("Hello"); 
}

動作方法 ResponseHello 這一次以 return Content() 回傳一段「Hello」字串,在瀏覽器呈現結果如下左截圖:

右截圖是開啟原始碼的畫面,可以看到內容並非網頁,而是單一字串「Hello」。

ActionResult 根據回應類型提供對應的子類別,以支援純文字、檔案或是HTML網頁,甚至轉向的回應等要求。

ActionResult 類別內建於 Microsoft.AspNetCore.Mvc 命名空間,透過對應的方法即可取得特定子類別的實體物件回傳,例如return View()。

return View() 是一開始學習MVC專案首先會接觸的方法,回傳 ActionResult 子類別 ViewResult 物件,這個物件封裝一個檢視檔案樣板,定義轉換成網頁所需的HTML與Razor 內容,在預設的情形下,MVC回傳與目前動作方法名稱相同的檢視檔案,這個檔案以控制器名稱為路徑依據,存放於同名資料夾裏面。

而這裏示範的 return Contect(s) 則直接回傳參數s所表示的純文字內容,而其對應的封裝物件則是另外一個ActionResult 子類別 ContentResult 物件。 

ActionResult 子類別

ActionResult 衍生各種不同的子類別,以支援動作方法的各種回應,包含轉向、HTTP狀態碼等,並以對應的方法進行回傳,就如同 return View() 回傳ViewResult 物件。

動作方法回傳的ActionResult可以分成以下表列的數種類型:

類型回傳結果 ActionResult 型別說明
檢視ViewResult 回傳一個指定或是預設View檔案
PartialViewResult 回傳一個指定或是預設Partial View檔案
文字物件ContentResult 回傳文字內容
JsonResult 回傳Json格式物件
EmptyResult 空的結果無回傳內容
檔案FileResult 回傳檔案物件以支援檔案下載作業
轉向RedirectResult 轉向至指定的(參考 / 絕對)URL
RedirectToRouteResult 轉向至指定的本地URL
RedirectToPageResult 轉向至指定的頁面
RedirectToActionResult 轉向至指定的動作方法
RedirectToRouteResult 轉向至一個根據路由組態產生的URL
HTTP 狀態碼StatusCodeResult 回傳特定的HTTP狀態碼

其中每一種特定的ActionResult 型別表示特定的HTTP回應結果,適合各種應用場景,後續持續針對每一種回傳結果進行討論。

沒有留言: