我正在使用ASP.NET Core 2.2 ApiController,并且具有以下内容:

[ApiController]
public class PostController : Controller {
  [HttpGet("posts")]
  public async Task<IActionResult> Get() {
    return BadRequest();
  }
}

在这种情况下,我得到以下响应:
{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "Bad Request",
  "status": 400,
  "traceId": "0HLMFSL0C7SKB:00000001"
}

但是,如果我返回一些数据,如下所示:
[ApiController]
public class PostController : Controller {
  [HttpGet("posts")]
  public async Task<IActionResult> Get() {
    List<String> errors = new List<String> { "Code is invalid" };
    return BadRequest(new { errors = errors });
  }
}

我得到以下内容:
{
  "errors": ["Code is invalid"]
}

当没有内容返回时,为什么ApiController添加类型,标题,状态和traceId?

我希望回复总是像这样:
{
  "errors": ["Code is invalid"],
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "Bad Request",
  "status": 400,
  "traceId": "0HLMFSL0C7SKB:00000001"
}

最佳答案

默认的ControllerBase.BadRequest()响应内容是因为您已将[ApiController]属性应用于您的 Controller 。这是documented online:

这包括typetitlestatustraceId值。
如果您没有应用[ApiController],那么ControllerBase.BadRequest()将返回带有HTTP 400状态码的空响应。
接受ControllerBase.BadRequestvalue响应对象的model的所有重载都将被序列化并返回,而不使用ApiController默认响应。

关于c# - ApiController并不总是在BadRequest中返回数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55973998/

10-16 12:49