.NET CORE 3.1 ApiController 装饰器 return json 使用 System.Text.Json 吗?
.NET CORE 3.1 Does ApiController decorator return json using System.Text.Json?
我正在从 .NET Core 2.2 转换到 .NET Core 3.1,并且我一直在使用 JsonApiDotNetCore
class 到 return 对象在 JSON 中正常格式:
public class ClientsController : JsonApiController<Client>
{
[AllowAnonymous]
[HttpGet("/Route/Page")]
public async Task<ActionResult> TestAsync()
{
// Do some stuff
return Ok(someObject);
}
}
我正在考虑可能离开 JsonApiDotNetCore
并使用带有 ApiController 装饰器的 ControllerBase。这个装饰器 return 是在 JSON 中格式化的对象以及使用 System.Text.Json 的 HTTP 状态(即 OK = 200)吗?如果没有,是否可以将其用于 return 对象?我想这样做是因为微软已经证明这个新的 class 针对高性能进行了优化。
public class ClientsController : ControllerBase
{
[ApiController]
[AllowAnonymous]
[HttpGet("/Route/Page")]
public async Task<ActionResult> TestAsync()
{
// Do some stuff
return Ok(someObject);
}
}
public async Task<JsonResult> TestAsync()
{
return Json(someObject);
}
您可以使用 Json();
return Json
默认情况下您将获得 JSON 不是因为 ApiController
属性,而是因为它是响应浏览器时的默认行为,除非另有配置。详情见documentation:
Unlike typical API clients, web browsers supply Accept headers. Web browser specify many formats, including wildcards. By default, when the framework detects that the request is coming from a browser:
- The Accept header is ignored.
- The content is returned in JSON, unless otherwise configured.
This provides a more consistent experience across browsers when consuming APIs.
很好地解释了 ApiControler 属性的作用 and here。基本上它添加了验证、属性路由和其他功能。同样,请参阅链接了解详情。
您还可以检查源代码以找到对属性的所有引用,例如 ApiBehaviorApplicationModelProvider class - 这里的 OnProvidersExecuting
方法。
我正在从 .NET Core 2.2 转换到 .NET Core 3.1,并且我一直在使用 JsonApiDotNetCore
class 到 return 对象在 JSON 中正常格式:
public class ClientsController : JsonApiController<Client>
{
[AllowAnonymous]
[HttpGet("/Route/Page")]
public async Task<ActionResult> TestAsync()
{
// Do some stuff
return Ok(someObject);
}
}
我正在考虑可能离开 JsonApiDotNetCore
并使用带有 ApiController 装饰器的 ControllerBase。这个装饰器 return 是在 JSON 中格式化的对象以及使用 System.Text.Json 的 HTTP 状态(即 OK = 200)吗?如果没有,是否可以将其用于 return 对象?我想这样做是因为微软已经证明这个新的 class 针对高性能进行了优化。
public class ClientsController : ControllerBase
{
[ApiController]
[AllowAnonymous]
[HttpGet("/Route/Page")]
public async Task<ActionResult> TestAsync()
{
// Do some stuff
return Ok(someObject);
}
}
public async Task<JsonResult> TestAsync()
{
return Json(someObject);
}
您可以使用 Json();
return Json默认情况下您将获得 JSON 不是因为 ApiController
属性,而是因为它是响应浏览器时的默认行为,除非另有配置。详情见documentation:
Unlike typical API clients, web browsers supply Accept headers. Web browser specify many formats, including wildcards. By default, when the framework detects that the request is coming from a browser:
- The Accept header is ignored.
- The content is returned in JSON, unless otherwise configured.
This provides a more consistent experience across browsers when consuming APIs.
很好地解释了 ApiControler 属性的作用
您还可以检查源代码以找到对属性的所有引用,例如 ApiBehaviorApplicationModelProvider class - 这里的 OnProvidersExecuting
方法。