对于自定义错误,我应该使用什么 HTTP 状态代码?

rno*_*nko 4 api rest http asp.net-web-api

我需要返回有关错误的信息,例如:客户不能有超过 3 个联系人字段 Job 为空超出操作限制

我是否需要使用自己的状态代码发送每个错误?
我可以400 BadRequest用于所有这些错误吗?

Jon*_*nna 5

我可以对所有这些错误使用 400 BadRequest 吗?

最肯定的。

这曾经有点可疑,因为 RFC 2616 将 400 Bad Request 定义为:

由于语法格式错误,服务器无法理解该请求。客户端不应该在没有修改的情况下重复请求。

但是,通常没有更适用的更好状态,因此通常将其用作最合适的状态。

随着 RFC 7231 废弃了 RFC 2616 并为 400 提供了更广泛的定义,这已经发生了变化:

400 (Bad Request) 状态码表示服务器由于被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由)而无法或不会处理请求。

因为“被认为是客户端错误的东西”涵盖了许多罪过,所以现在更明确地适用。

当然,如果另一个 4xx 代码确实匹配得更好(例如,404 用于与不存在的事物相关的请求 [消息中的 ID 未找到匹配项]),那么它是更好的选择。