asp.net mvc5 step by step(四)——關於Controller的ActionResult

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

1、ActionResult的派生關係圖:php

2、常見的幾種ActionResulthtml

 

一、ContentResultvue

返回簡單的純文本內容,可經過ContentType屬性指定應答文檔類型,經過ContentEncoding屬性指定應答文檔的字符編碼。可經過 Controller類中的Content方法便捷地返回ContentResult對象。若是控制器方法返回非ActionResult對象,MVC將 簡單地以返回對象的ToString()內容爲基礎產生一個ContentResult對象。java

 

 
C# 代碼    複製

public ContentResult RSSFeed()  {   Story[] stories = GetAllStories(); // Fetch them from the database or wherever     // Build the RSS feed document    string encoding = Response.ContentEncoding.WebName;   XDocument rss = new XDocument(new XDeclaration("1.0", encoding, "yes"),   new XElement("rss", new XAttribute("version", "2.0"),   new XElement("channel", new XElement("title", "Example RSS 2.0 feed"),   from story in stories   select new XElement("item",   new XElement("title", story.Title),   new XElement("description", story.Description),   new XElement("link", story.Url)   )   )   )   );   return Content(rss.ToString(), "application/rss+xml");  } 


二、EmptyResultios

返回一個空的結果。若是控制器方法返回一個null,MVC將其轉換成EmptyResult對象。c++


三、RedirectResultweb

表示一個鏈接跳轉,至關於ASP.NET中的Response.Redirect方法。對應的Controller方法爲Redirect。npm

 
C# 代碼    複製

public override void ExecuteResult(ControllerContext context) {   if (context == null) {   throw new ArgumentNullException("context");   }   if (context.IsChildAction) {   throw new InvalidOperationException(MvcResources.RedirectAction_CannotRedirectInChildAction);   }     string destinationUrl = UrlHelper.GenerateContentUrl(Url, context.HttpContext);   context.Controller.TempData.Keep();   context.HttpContext.Response.Redirect(destinationUrl, false /* endResponse */);  } 


四、RedirectToRouteResultjson

一樣表示一個調轉,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。

 

 
C# 代碼    複製

class CityData { public string city; public int temperature; }  public JsonResult WeatherData()  {   var citiesArray = new[] {   new CityData { city = "London", temperature = 68 },   new CityData { city = "Hong Kong", temperature = 84 }   };   return Json(citiesArray);  } 


十、FilePathResult、FileContentResult、FileStreamResult: 這三個類繼承於FileResult,表示一個文件內容,三者的區別在於,FilePath經過路徑傳送文件到客戶端,FileContent經過二進制數據的方式,而FileStream是經過Stream的方式來傳送。Controller爲這三個文件結果類型提供了一個名爲File的重載方法。

 

FilePathResult:直接將一個文件發送給客戶端

 
C# 代碼    複製

public FilePathResult DownloadReport()  {   string filename = @"c:\\files\\somefile。pdf";   return File(filename, "application/pdf", "AnnualReport。pdf");  } 

 

FileContentResult:返回byte字節給客戶端好比圖片

 
C# 代碼    複製



public FileContentResult GetImage(int productId)  {   var product = productsRepository.Products.First(x => x.ProductID == productId);   return File(product.ImageData, product.ImageMimeType);  }  <img src="<%: Url.Action("GetImage", "Products", new { Model.ProductID }) %>" /> 

 

FileStreamResult:返回流

 
C# 代碼    複製


public FileStreamResult ProxyExampleDotCom()  {   WebClient wc = new WebClient();   Stream stream = wc.OpenRead(http://www.studyofnet.com/);   return File(stream, "text/html");  }

3、Controller的Helper方法,能夠返回對應的ActionResult
相關文章
相關標籤/搜索