我应该使用什么HTTP状态代码进行自定义错误?

时间:2016-01-09 21:52:49

标签: api rest http asp.net-web-api

我需要返回有关以下错误的信息:客户无法拥有3个以上的联系人字段作业为空操作限制为超过

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

4 个答案:

答案 0 :(得分:3)

  

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

当然。

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

  

由于格式错误,服务器无法理解该请求      句法。客户端不应该重复请求      修改

但是,通常没有更适用的更好状态,所以它通常被用作最适合的状态。

这已经改变,RFC 7231废弃了RFC 2616,并为400提供了更广泛的定义:

  

400(错误请求)状态代码表示服务器不能或      由于被认为是某种东西,它不会处理请求      客户端错误(例如,格式错误的请求语法,无效请求      消息框架或欺骗性请求路由)。

因为"被认为是客户端错误的东西"它涵盖了许多罪行,现在更明确适用。

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

答案 1 :(得分:1)

  

我可以将BadRequest(400)用于所有这些错误吗?

是的,这绝对是此类验证错误的正确状态代码。

答案 2 :(得分:0)

  

我可以将BadRequest(400)用于所有这些错误吗?

400 Bad Request状态代码用于指示与请求语法相关的错误。例如。有一个String类型的字段,并传递了Integer。或者作为类型String的字段接受一组预定义值(枚举)但传递另一个字符串。有一个领域缺失。字段不能为空。

因此,如果字段丢失或为空,则肯定是400 Bad Request错误。

然而,当谈到客户不能超过3个联系人时,它并不是那么清楚。如果您已将主体限制为接受0-3范围内的值,则为400 Bad Request,但是如果该字段接受任何整数,并且事后证明它不是在0-3之后(在实体处理期间)它将是409 Conflict(更好的主意)或403 Forbidden(更糟糕的主意)。

超出了操作限制肯定听起来不像是400 Bad Request错误。它可能是403 Forbidden429 Too Many Requests

您似乎无法仅使用400 Bad Request来处理所有错误。

总是在身体信息中解释问题的真正重要性。

BTW:403 Forbidden用于表示不一定与身份验证或授权相关的禁止操作。

答案 3 :(得分:-1)

不,显然你不应该,你应该在浏览器中搜索“HTTP状态代码列表”。

可用的一个链接是https://en.wikipedia.org/wiki/List_of_HTTP_status_codes