NET CORE 3.1 ApiController decorator是否使用System返回json.文本Json



我正在从转换。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;

最新更新