跟着官网学ASP.NET Core 6.0之设置响应数据的格式
我们用ASP.NET Core开发Web API时,肯定会有返回值场景,ASP.NET Core则提供了三种返回类型:
- 特定类型
- IActionResult
- ActionResult
特定类型
特定类型就是我们一般的数据类型或者自定义的类,还是拿之前的例子来说,如:
1 | [HttpGet("all")] |
我们可以看到,结果返回的是标准的JSON数组格式。特定类型简单,但是过于单一,有时候,我们想要返回一些其他状态类型的结果,这种方式便不可取了。
IActionResult和ActionResult
我们在用VS创建控制器时,选择包含读/写操作的API控制器时,VS会根据模板生成相应的代码,如:
1 | [HttpGet("{id}")] |
我们从自动生成的代码中可以看出,在有返回值时,用的是ActionResult<T>
,不需要返回值的方法则使用的IActionResult
,方法内部的返回值类型也比较多,如NoContent
、NotFound
、BadRequest
等,它们其实都继承了ActionResult
和IActionResult
,默认返回的content-type
类型是application/json; charset=utf-8
。
响应数据的格式
在 ASP.NET Core 3.0之后,默认是基于 System.Text.Json来格式化JSON,默认格式为camelCase(驼峰命名法)
,如果想要设置为PascalCase
格式,那么需要在Program.cs
进行设置
1 | builder.Services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null); |
在ASP.NET Core 6.0中默认使用的是System.Text.Json
,如果想换成Newtonsoft.Json
怎么弄呢?需要安装Microsoft.AspNetCore.Mvc.NewtonsoftJson
,然后去Program.cs
中配置
1 | builder.Services.AddControllers().AddNewtonsoftJson(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver() |
换成NewtonsoftJson
后,之前的AddJsonOptions
便不再适用了,需要在AddNewtonsoftJson
类进行设置
在ASP.NET Core中,默认 支持 application/json、text/json 和 text/plain 媒体类型,
服务端会根据请求头中的Accept
标识中的类型作出相应的格式返回,默认是application/json
,如果我们想要支持XML
怎么弄呢?很简单,只需要在Program.cs
添加AddXmlSerializerFormatters
即可
如果你觉得现有的格式还是不足以支撑你现在有业务,别担心,ASP.NET Core提供自定义格式化,分别新建继承TextOutputFormatter
和TextInputFormatter
类,重写父类的 CanReadType
、 CanWriteType
、ReadRequestBodyAsync
、WriteResponseBodyAsync
方法,然后将自定义的格式化类在Program.cs
中的AddControllers
添加到InputFormatters
或OutputFormatters
,如
好了,今天大概的了解了
ASP.NET Core响应数据的格式
,下一节,继续学习一下处理 ASP.NET Core Web API 中的错误
跟着官网学ASP.NET Core 6.0之设置响应数据的格式