轉自: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