12

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

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA%3D%3D&%3Bmid=2654077135&%3Bidx=7&%3Bsn=eb19b9351e865c2843f48f90f7552dc7
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

当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 的例子:  

QbyqMbN.png!web

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

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

viuy2qq.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK