ActionResult是控制器方法執行後返回的結果類型,控制器方法能夠返回一個直接或間接從ActionResult抽象類繼承的類型,若是返回的是非ActionResult類型,控制器將會將結果轉換爲一個ContentResult類型。默認的ControllerActionInvoker調用ActionResult.ExecuteResult方法生成應答結果。javascript
MVC中實現的默認ActionResult以下:java
一、ContentResult: 返回簡單的純文本內容,可經過ContentType屬性指定應答文檔類型,經過ContentEncoding屬性指定應答文檔的字符編碼。可經過Controller類中的Content方法便捷地返回ContentResult對象。若是控制器方法返回非ActionResult對象,MVC將簡單地以返回對象的ToString()內容爲基礎產生一個ContentResult對象。
二、EmptyResult: 返回一個空的結果。若是控制器方法返回一個null,MVC將其轉換成EmptyResult對象。
三、RedirectResult: 表示一個鏈接跳轉,至關於ASP.NET中的Response.Redirect方法。對應的Controller方法爲Redirect。
四、RedirectToRouteResult:一樣表示一個調轉,MVC會根據咱們指定的路由名稱或路由信息(RouteValueDictionary)來生成Url地址,而後調用Response.Redirect跳轉。對應的Controller方法爲RedirectToAction和RedirectToRoute。
五、ViewResult: 表示一個視圖結果,它根據視圖模板產生應答內容。對應Controller方法爲View。
六、PartialViewResult: 表示一個部分視圖結果,與ViewResult本質上一致,只是部分視圖不支持母版,對應於ASP.NET,ViewResult至關於一個Page,而PartialViewResult則至關於一個UserControl。它對應的Controller方法爲PartialView。
七、HttpUnauthorizedResult: 表示一個未經受權訪問的錯誤。MVC會向客戶端發送一個401的應答狀態。若是在web.config中開啓了表單驗證(authentication mode="Forms"),則401狀態會將Url轉向指定的loginUrl連接。
八、JavaScriptResult: 本質上是一個文本內容,只是將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。
十、FilePathResult、FileContentResult、FileStreamResult: 這三個類繼承於FileResult,表示一個文件內容,三者的區別在於,FilePath經過路徑傳送文件到客戶端,FileContent經過二進制數據的方式,而FileStream是經過Stream的方式來傳送。Controller爲這三個文件結果類型提供了一個名爲File的重載方法。web
經過直接或間接地從ActionResult繼承,可實現自定義的結果類型,下例將實現一個XmlResult類型,用於返回XML應答內容:json
一、建立一個空的MVC項目app
二、實現XmlResult類ide
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()); } } } }三、建立一個HomeController,實現Index方法工具
public ActionResult Index(){return new XmlResult(new Product(){ID = "000001",Name = "測a試?",Description = ""});}
源代碼下載this