c# - ApiController 并不总是在 BadRequest 中返回数据

标签 c# asp.net-core asp.net-core-mvc asp.net-core-2.2

我正在使用 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在没有返回内容的情况下添加type、title、status和traceId?

我希望回复总是相似的,例如:

{
  "errors": ["Code is invalid"],
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "Bad Request",
  "status": 400,
  "traceId": "0HLMFSL0C7SKB:00000001"
}

最佳答案

您只需要返回 ValidationProblem() 结果,而不是返回 BadRequest() 结果。这将为您提供包含当前 ModelState 错误的 ProblemDetails 对象响应。

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

相关文章:

asp.net-core - IdentityServer v4 的 ASP.NET Core 客户端中的通知

c# - 游戏设计改进

c# - 在 Windows 8 桌面应用程序的默认浏览器中打开 URL

c# - 出于可空性分析目的,如何告诉 C# 结构的不可空字段实际上可能为空?

c# - 如何在 ASP.NET Core 1.0 中为 Web 应用程序显示 LoggerFactory 日志控制台?

c# - .NET MVC 6/vNext UserValidator 允许字母数字字符

entity-framework - 如何在 Entity Framework 7 中运行自动映射到实体的动态 SQL 查询 (SqlQuery<T>)?

javascript - 从我的 iphone(从触摸屏)访问时,无法在 jQuery 模式弹出窗口内向下滚动

c# - JSON反序列化可变数量的属性

c# - ASP.NET Core 的 Microsoft 身份验证方案是什么?