一、常见的返回类型
以系统模板默认生成的Home/Index这个Action来说,为什么当请求它的时候回返回一个Html页面呢?除了这之外,还有JSON、文本等类型,系统是如何处理这些不同的类型的呢?
首先来说几种常见的返回类型的例子,并用Fiddler请求这几个例子看一下结果,涉及到的一个名为Book的类,代码为:
public class Book { public string Code { get; set; } public string Name { get; set; } }
1.ViewResult类型
public class HomeController : Controller { public IActionResult Index() { return View(); } }
返回一个Html页面,Content-Type值为: text/html; charset=utf-8
2.string类型
1. public string GetString() { return "Hello Core"; }
返回字符串“Hello Core”,Content-Type值为:text/plain; charset=utf-8
3.JSON类型
public JsonResult GetJson() { return new JsonResult(new Book() { Code = "1001", Name = "ASP" }); }
返回JSON,值为:
{"code":"1001","name":"ASP"}
Content-Type值为:Content-Type: application/json; charset=utf-8
4.直接返回实体类型
public Book GetModel() { return new Book() { Code = "1001", Name = "ASP" }; }
同样是返回JSON,值为:
{"code":"1001","name":"ASP"}
Content-Type值同样是:Content-Type: application/json; charset=utf-8
5.void类型
public void GetVoid() { }
没有返回结果也没有Content-Type值。
下面看几个异步方法:
6.Task类型
public async Task GetTaskNoResult() { await Task.Run(() => { }); }
与void类型一样,没有返回结果也没有Content-Type值。
7.Task<string>类型
public async Task<string> GetTaskString() { string rtn = string.Empty; await Task.Run(() => { rtn = "Hello Core"; }); return rtn; }
与string类型一样,返回字符串“Hello Core”,Content-Type值为:text/plain; charset=utf-8
8.Task<JsonResult>类型
public async Task<JsonResult> GetTaskJson() { JsonResult jsonResult = null; await Task.Run(() => { jsonResult = new JsonResult(new Book() { Code = "1001", Name = "ASP" }); }); return jsonResult; }
与JSON类型一样,返回JSON,值为:
[{"code":"1001","name":"ASP"},{"code":"1002","name":"Net Core"}]
Content-Type值为:Content-Type: application/json; charset=utf-8
还有其他类型,这里暂不列举了,总结一下:
返回结果有空、Html页面、普通字符串、JSON字符串几种。
对应的Content-Type类型有空、text/html、text/plain、application/json几种。
异步Action的返回结果,和其对应的同步Action返回结果类型一致。
下一节我们看一下系统是如何处理这些不同的类型的。