ASP.NET Core 動做結果 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

原文:ASP.NET Core 動做結果 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程html

ASP.NET Core 動做結果

前面的章節中,咱們一直使用簡單的 C# 類做爲控制器。 雖然這些類不是從基類派生的,但仍然能夠在 MVC 中使用這種方法。 固然了,對於控制器,但更常見的作法是從 Microsoft.AspNetCore.Mvc 命名空間中提供的控制器基類中派生控制器。本章中,咱們將嘗試這麼作,而且學習動做結果 ( Action Results )。編程

動做結果 ( Action Result )

Microsoft.AspNetCore.Mvc 命名空間下的基類 Controller 讓咱們可以訪問不少關於 HTTP 請求的上下文信息,以及提供了一些方法幫助我​​們構建返回給回客戶端的結果json

返回的響應的結果中,咱們能夠發送簡單的字符串或者整數,或者發送像對象這樣的複雜數據來表示學生或大學或餐館等信息,以及與該對象關聯的全部數據markdown

這些結果一般被封裝到實現 IActionResult 接口的對象中,有大量的不一樣類型的結果實現了該接口,這些結果類型能夠包含模型或文件的內容以供下載框架

這些不一樣的結果類型便可以返回 JSON,也能夠返回 XML,或者 HTML 視圖less

動做基本上能夠返回任意不一樣類型的動做結果。它們都有一個共同的基類:ActionResultide

下表列出了不一樣種類的動做結果及其行爲學習

動做名稱( 類 ) 行爲
ContentResult 返回一串字符串
FileContentResult 返回文件的內容
FilePathResult 返回路徑文件的內容
FileStreamResult 返回流文件的內容
EmptyResult 返回空
JavaScriptResult 返回一段 JavaScript 代碼
JsonResult 返回 JSON 格式的數據
RedirectToResult 重定向到某個 URL
HttpUnauthorizedResult 返回 403 未受權狀態碼
RedirectToRouteResult 重定向到不一樣的控制器或方法
ViewResult 從視圖引擎中返回一個響應
PartialViewResult 從視圖引擎中返回一個響應

範例: ContentResult

如今,咱們修改 HomeController.cs ,引入命名空間 Microsoft.AspNetCore.Mvc,並修改 HomeController 繼承自 Controllerspa

下面代碼是 HomeController 類的完整實現code

using System; using Microsoft.AspNetCore.Mvc; namespace HelloWorld.Controllers { public class HomeController: Controller { public ContentResult Index() { return Content("你好,世界! 這條消息來自使用了 Action Result 的 Home 控制器"); } } } 

咱們能夠看到,Index() 方法返回了一個 ContentResult 類型的結果。ContentResult 是實現了 ActionResult 接口的不一樣結果類型之一

Index() 方法中,咱們將一個字符串傳遞給 Content()Content() 方法會產生一個 ContentResult,也就是說,Index() 方法會返回 ContentResult

保存 HomeController.cs 文件,重啓應用程序,而後訪問跟目錄 /,咱們將會獲得如下輸出

咱們能夠看到,這個響應和以前咱們看到的響應幾乎沒有任何區別,它仍然只是一個純文本的響應

你可能很想知道使用 ActionResult 來生成東西有什麼優點

在 Mvc 模式中,控制器決定接下來要作什麼,返回一個字符串或 HTML 或返回可能被序列化爲 JSON 等的模型對象

Mvc 中的控制器須要作的就是作出決定,但控制器沒必要直接在響應中寫入決策結果。 它只須要返回結果,而後框架會使用這些結果並理解如何將結果轉換爲可經過 HTTP 發回的內容

範例:ObjectResult

若是你不能理解上面這些內容,不要緊,咱們再來看一個範例,此次咱們使用 ObjectResult

在解決方案管理器中的 HelloWorld 上點擊右鍵,建立一個新文件夾並將其命名爲 Models。 在 Models 文件夾中,添加一個用於表示僱員的 Employee

建立完成後,目錄結構以下

Employee.cs 中的內容以下

using System; namespace HelloWorld.Models { public class Employee { public Employee() { } } } 

修改剛剛建立的 Employee 類,添加兩個屬性,一個整型的 ID 和 一個字符串類型的 Name,修改完成後 Employee.cs 中的內容以下

using System; namespace HelloWorld.Models { public class Employee { public Employee() { } public int ID { get; set; } public string Name { get; set; } } } 

而後咱們回到 HomeController 控制器,修改 Index() 方法,返回一個 Employee 對象。

修改完成後的 HomeController.cs 內容以下

using System; using Microsoft.AspNetCore.Mvc; using HelloWorld.Models; namespace HelloWorld.Controllers { public class HomeController: Controller { public ObjectResult Index() { var employee = new Employee { ID = 1, Name = "語飛"}; return new ObjectResult(employee); } } } 

如今,返回的不是 Content,而是返回一個不一樣類型的結果 ObjectResult。 若是咱們想要一個 ObjectResult,咱們須要建立或實例化一個 ObjectResult 並將一些模型對象做爲參數傳遞給它

在 MVC 框架中,ObjectResult 是特殊的,由於當咱們返回一個 ObjectResult 時,MVC 框架將訪問這個對象。並將這個對象作一些轉換,而後做爲 HTTP 響應返回給客戶端

在轉換 ObjectResult 對象時,它可能被序列化爲 XMLJSON 或其它格式, 至於什麼格式,由應用程序啓動時向 MVC 提供的配置信息決定。若是咱們沒有顯式的配置任何東西,那麼將會使用 JSON 做爲默認格式

保存全部的文件,重啓應用程序,而後訪問首頁,咱們將獲得以下結果

相關文章
相關標籤/搜索