首页 > 代码库 > (七)Action 的返回值 ActionResult

(七)Action 的返回值 ActionResult

1. 当返回一个页面,return View();  View() 方法的返回值是 ViewResult 类型,继承自 ActionResult。

2. 当重定向一个页面, return Redirect("Path"); Redirect() 方法的返回值类型是 RedirectResult。

3. 直接返回文本内容:ruturn Content("value"); Content() 方法的返回值类型是 ContentResult。

4. 当返回一个文件的时候,使用 File() 方法,File 方法有多个重载:

//返回 byte[] 类型的数据
protected internal FileContentResult File(byte[] fileContents, string contentType);

//返回 Stream 类型的数据 
protected internal FileStreamResult File(Stream fileStream, string contentType);

//fileName 为本地文件路径
protected internal FilePathResult File(string fileName, string contentType);

//上面三个方法是在网页直接显示内容
//下面三个方法是对应的直接下载的
protected internal virtual FileContentResult File(byte[] fileContents, string contentType, string fileDownloadName);

protected internal virtual FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName);

virtual FilePathResult File(string fileName, string contentType, string fileDownloadName);

5. 当没有返回相应的内容或页面的时候,return HttpNotFound(); 浏览器会给出 404 错误。

6. 也可以返回 JavaScript 代码, 但是返回的是代码字符串,效果和 return Content() 是一样的,尽量不要用。

7. 返回 Josn: return Json(object data), 把 data 对象序列化成 json 字符串给客户端,并且设置 contentType为 “application/json"。Json 方法默认是禁止 Get 请求的,只能 Post 请求,所以如果 Get 请求方法访问是会报错的,如果确实需要使用 Get 方式,使用 return Json(data, JsonRequestBehavior.AllowGet)。


 

ASP.NET MVC 默认提供的 Json 方法实现有以下缺点:

  1. 日期类型的属性格式化字符串是 "\/Date(1491921608507)\/" 这样的格式,在客户端要用 JS 代码格式化处理,很麻烦。
  2. Json 字符串中的属性的名字和 C#中的大小写一样,不符合 JS 中 ”小写开头,驼峰命名“的习惯。
  3. 无法处理循环引用的问题(尽管应该避免循环引用)。

处理方法: 不使用默认提供的 Json 方法,使用 Json.Net。

(七)Action 的返回值 ActionResult