C#之ActionResult 詳解


轉自:https://blog.csdn.net/sundna/article/details/91511745

ActionResult是控制器方法執行后返回的結果類型,控制器方法可以返回一個直接或間接從ActionResult抽象類繼承的類型,如果返回的是非ActionResult類型,控制器將會將結果轉換為一個ContentResult類型。默認的ControllerActionInvoker調用ActionResult.ExecuteResult方法生成應答結果。

ActionResult 類圖:

 

 

 


各種Result說明:

動作類型 行為
ContentResult 返回簡單的純文本內容,可通過ContentType屬性指定應答文檔類型,通過ContentEncoding屬性指定應答文檔的字符編碼。可通過Controller類中的Content方法便捷地返回ContentResult對象。如果控制器方法返回非ActionResult對象,MVC將簡單地以返回對象的ToString()內容為基礎產生一個ContentResult對象。
FileContentResult 返回文件內容。FilePath通過路徑傳送文件到客戶端,FileContent通過二進制數據的方式,而FileStream是通過Stream的方式來傳送。Controller為這三個文件結果類型提供了一個名為File的重載方法。
FilePathResult 返回路徑文件的內容
EmptyResult 返回一個空的結果。如果控制器方法返回一個null,MVC將其轉換成EmptyResult對象。
JavaScriptResult 返回一段JavaScript代碼.本質上是一個文本內容,只是將Response.ContentType設置為 application/x-javascript,此結果應該和MicrosoftMvcAjax.js腳本配合使用,客戶端接收到Ajax應答后,將判斷Response.ContentType的值,如果是application/x-javascript,則直接eval執行返回的應答內容。此結果類型對應的Controller方法為JavaScript。
JsonResult 返回Json格式數據。 MVC將Response.ContentType設置為application/json,並通過JavaScriptSerializer類將指定對象序列化為Json表示方式。需要注意,默認情況下,MVC不允許GET請求返回JSON結果,要解除此限制,在生成JsonResult對象時,將其JsonRequestBehavior屬性設置為JsonRequestBehavior.AllowGet。此結果對應的Controller方法為Json。
RedirectToResult 表示一個連接跳轉,相當於ASP.NET中的Response.Redirect方法。對應的Controller方法為Redirect。
HttpUnauthorizedResult 返回HTTP403未授權狀態碼
RedirectToRouteResult 重定向到不同的控制器動作
ViewResult 接收視圖引擎的響應
PartialViewResult 接收分部視圖引擎的響應

Result的封裝:
除了通過new對象返回結果外,還可以使用封裝后的方法;

 

 

示例:

public IActionResult Result1()//實例化對象
{
JsonResult result = new JsonResult(new { name = "kxy1" });
return result;
}
public IActionResult Result2()//封裝方法
{
return Json(new { name = "kxy2" });
}
 

擴展ActionResult
下例將實現一個XmlResult類型,用於返回XML應答內容:

public class XmlResult : ActionResult
{
public XmlResult(Object data)
{
this.Data = data;
}

public Object Data
{
get;
set;
}

public override void ExecuteResult(ControllerContext context)
{
if (Data == null)
{
new EmptyResult().ExecuteResult(context);
return;
}

context.HttpContext.Response.ContentType = "application/xml";
using (MemoryStream ms = new MemoryStream())
{
XmlSerializer xs = new XmlSerializer(Data.GetType());
xs.Serialize(ms, Data);
ms.Position = 0;
using (StreamReader sr = new StreamReader(ms))
{
context.HttpContext.Response.Output.Write(sr.ReadToEnd());
}
}
}
}
 
————————————————
版權聲明:本文為CSDN博主「sundna」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sundna/java/article/details/91511745


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM