web-dev-qa-db-ja.com

ApiControllerは常にBadRequestでデータを返すとは限りません

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"
}
3
Miguel Moura

JsonConvertを使用して、不正な要求をシリアル化してみてください。

badRequest(JsonConvert.Serialize(new List {“コードが無効です”}));を返します。

0
Paul

BadRequest()の結果を返す代わりに、代わりにValidationProblem()の結果を返す必要があります。これにより、現在のModelStateエラーが入力されたProblemDetailsオブジェクトの応答が得られます。

0
Codemunkie