- ASP.NET Core 教程
- ASP.NET Core - 首頁
- ASP.NET Core - 概述
- ASP.NET Core - 環境設定
- ASP.NET Core - 新建專案
- ASP.NET Core - 專案佈局
- ASP.NET Core - Project.Json
- ASP.NET Core - 配置
- ASP.NET Core - 中介軟體
- ASP.NET Core - 異常處理
- ASP.NET Core - 靜態檔案
- ASP.NET Core - 設定 MVC
- ASP.NET Core - MVC 設計模式
- ASP.NET Core - 路由
- ASP.NET Core - 屬性路由
- ASP.NET Core - 操作結果
- ASP.NET Core - 檢視
- 設定 Entity Framework
- ASP.NET Core - DBContext
- ASP.NET Core - Razor 佈局檢視
- ASP.NET Core - Razor 檢視啟動
- ASP.NET Core - Razor 檢視匯入
- ASP.NET Core - Razor 標籤助手
- ASP.NET Core - Razor 編輯表單
- ASP.NET Core - 身份概述
- ASP.NET Core - 授權特性
- 身份配置
- ASP.NET Core - 身份遷移
- ASP.NET Core - 使用者註冊
- ASP.NET Core - 建立使用者
- ASP.NET Core - 登入和登出
- ASP.NET Core 有用資源
- ASP.NET Core - 快速指南
- ASP.NET Core - 有用資源
- ASP.NET Core - 討論
ASP.NET Core - 操作結果
在本章中,我們將討論操作結果。在前面的章節中,我們一直在使用簡單的 C# 類作為控制器。這些類沒有從基類派生,你可以在 MVC 中使用這種方法,但更常見的是從 Microsoft.AspNet.Mvc 名稱空間中提供的控制器基類派生控制器。
此基類使我們能夠訪問有關請求的大量上下文資訊,以及幫助我們構建結果以傳送回客戶端的方法。
你可以在響應中傳送回簡單的字串和整數。你還可以傳送回覆雜的物件,例如表示學生、大學或餐廳等的物件,以及與該物件關聯的所有資料。
這些結果通常封裝在實現 IActionResult 介面的物件中。
有許多不同的結果型別實現了此介面——可以包含模型或要下載的檔案內容的結果型別。
這些不同的結果型別允許我們向客戶端傳送回 JSON 或 XML 或構建 HTML 的檢視。
操作基本上返回不同型別的操作結果。ActionResult 類是所有操作結果的基類。以下是不同型別的操作結果及其行為的列表。
| 名稱 | 行為 |
|---|---|
| ContentResult | 返回字串 |
| FileContentResult | 返回檔案內容 |
| FilePathResult | 返回檔案內容 |
| FileStreamResult | 返回檔案內容。 |
| EmptyResult | 不返回任何內容 |
| JavaScriptResult | 返回要執行的指令碼 |
| JsonResult | 返回 JSON 格式的資料 |
| RedirectToResult | 重定向到指定的 URL |
| HttpUnauthorizedResult | 返回 403 HTTP 狀態程式碼 |
| RedirectToRouteResult | 重定向到不同的操作/不同的控制器操作 |
| ViewResult | 作為檢視引擎的響應接收 |
| PartialViewResult | 作為檢視引擎的響應接收 |
示例 1
讓我們透過開啟 **HomeController** 類並從基於控制器的類派生它來執行一個簡單的示例。此基類位於 **Microsoft.AspNet.Mvc** 名稱空間中。以下是 **HomeController** 類的實現。
using Microsoft.AspNet.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FirstAppdemo.Controllers {
public class HomeController : Controller {
public ContentResult Index() {
return Content("Hello, World! this message is from
Home Controller using the Action Result");
}
}
}
現在你可以看到 index 方法返回 ContentResult,它是結果型別之一,並且所有這些結果型別最終都實現了 **ActionResult** 介面。
在 Index 方法中,我們將一個字串傳遞給 Content 方法。此 Content 方法生成一個 ContentResult;這意味著 Index 方法現在將返回 **ContentResult**。
讓我們儲存 **HomeController** 類並在瀏覽器中執行應用程式。它將生成以下頁面。
現在你可以看到一個響應,它與我們之前看到的響應沒有什麼不同。它仍然只是一個純文字響應。
你可能想知道使用生成 **ActionResult** 的東西有什麼好處。
典型的優點是它只是封裝控制器決策的一種正式方式。
控制器決定接下來做什麼,要麼返回字串或 HTML,要麼返回可能被序列化為 JSON 等的模型物件。
控制器需要做的只是做出決定,並且控制器不必直接寫入響應其決策的結果。
它只需要返回決策,然後是框架將獲取結果並理解如何將該結果轉換為可以透過 HTTP 傳送回的內容。
示例 2
讓我們再舉一個例子。在專案中建立一個新資料夾並將其命名為 **Models**。在 Models 資料夾中,我們想要新增一個可以表示 Employee 的類。
在“名稱”欄位中輸入 **Employee.cs**,如上圖所示。此處,Employee 類的實現包含兩個屬性。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FirstAppDemo.Models {
public class Employee {
public int ID { get; set; }
public string Name { get; set}
}
}
在 **HomeController** 的 Index 操作方法中,我們想要返回一個 Employee 物件。以下是 HomeController 的實現。
using FirstAppDemo.Models;
using Microsoft.AspNet.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FirstAppdemo.Controllers {
public class HomeController : Controller {
public ObjectResult Index() {
var employee = new Employee { ID = 1, Name = "Mark Upston"};
return new ObjectResult(employee);
}
}
}
現在,我們不再返回 Content,而是返回一種稱為 **ObjectResult** 的不同型別的結果。如果我們想要 ObjectResult,我們需要建立一個或例項化一個 ObjectResult 並向其中傳遞一些 **model** 物件。
ObjectResult 在 MVC 框架中是特殊的,因為當我們返回 ObjectResult 時,MVC 框架會檢視此物件。此物件需要在 HTTP 響應中表示。
此物件應序列化為 XML 或 JSON 或其他某種格式,最終,決策將基於你在啟動時提供給 MVC 的配置資訊做出。如果你沒有配置任何內容,你只會獲得一些預設值,預設值是 JSON 響應。
儲存所有檔案並重新整理瀏覽器。你將看到以下輸出。