我正在从转换。NET Core 2.2到。NET Core 3.1和我一直在使用JsonApiDotNetCore
类以JSON格式将对象返回为OK:
public class ClientsController : JsonApiController<Client>
{
[AllowAnonymous]
[HttpGet("/Route/Page")]
public async Task<ActionResult> TestAsync()
{
// Do some stuff
return Ok(someObject);
}
}
我正在考虑从JsonApiDotNetCore
转移到使用ControllerBase和ApiController装饰器。这个decorator是否使用System返回以JSON格式格式化的对象以及HTTP状态(即,OK=200(。文本Json?如果没有,是否可以使用它来返回对象?我想这样做是因为微软已经证明了这个新类是为高性能而优化的。
public class ClientsController : ControllerBase
{
[ApiController]
[AllowAnonymous]
[HttpGet("/Route/Page")]
public async Task<ActionResult> TestAsync()
{
// Do some stuff
return Ok(someObject);
}
}
默认情况下,您将获得JSON,这不是因为ApiController
属性,而是因为它是响应浏览器时的默认行为,除非另有配置。有关详细信息,请参阅文档:
与典型的API客户端不同,web浏览器提供Accept头。Web浏览器指定了许多格式,包括通配符。默认情况下,当框架检测到请求来自浏览器时:
- Accept标头被忽略
- 除非另有配置,否则内容将以JSON形式返回
这在使用API时提供了跨浏览器的更一致的体验。
ApiController属性的作用在这里和这里都有很好的解释。基本上,它添加了验证、属性路由和其他功能。同样,有关详细信息,请参阅链接。
您还可以检查源代码,以查找对该属性的所有引用,例如在ApiBehaviorApplicationModelProvider类中(此处为OnProvidersExecuting
方法(。
public async Task<JsonResult> TestAsync()
{
return Json(someObject);
}
您可以使用Json((返回Json;