使用ASP.NET Core 3.x 构建 RESTful API – 3.3.3 ProblemDetails

当ASP . NET Core  大约在  2.1  版本的时候,它引入了  ProblemDetails ProblemDetails 是基于   RFC7807   这个规范,目的是让  HTTP  响应可以携带错误的详细信息,而不是只返回一个错误的状态码。  

ASP . NET Core 2.2 的时候,如果 Controller 使用了   [ ApiController ]   这个属性,那么  ProblemDetails  就是客户端错误码的标准响应。  

例如,当返回类型为 IActionResult  的方法返回客户端错误状态码的时候( 4xx ),同时还会返回一个 body ,这个  body  就是  ProblemDetails   这个结果里还会包含着一个相关的 ID ,使用这个 ID ,就可以把错误和相应的请求日志关联起来。  

关于 ProblemDetails 这个类,可以查看: 官方文档  

为了使用 ProblemDetails  

  • 需要为应用程序定义一个通用的错误显示格式  

  • 很多时候 , 只返回 HTTP 状态码并不能表达和传递出足够的信息。  

ASP . NET Core 3.x 里面,同样也使用了  ProblemDetails  

看一个返回 404 的例子:  

这是一个 Get 请求,但是并没有找到该资源,返回的状态码是 404 ,而响应的 body 就是  ProblemDetails  

值得注意的是,这个响应的   Content-Type     application / problem + json