【问题标题】:What HTTP status code should I use for custom errors?我应该为自定义错误使用什么 HTTP 状态代码?
【发布时间】:2016-04-14 10:51:12
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    当然。

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

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

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

    随着 RFC 7231 淘汰 RFC 2616 并为 400 提供更广泛的定义,这种情况发生了变化:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        因此,如果一个字段丢失或为空,这绝对是一个400 Bad Request 错误。

        但是,客户的联系人不能超过 3 个,这还不是很清楚。如果您已将正文限制为接受 0-3 范围内的值,则为 400 Bad Request,但如果该字段接受任何整数并且后来证明它不在 0-3 范围内(在实体处理期间),它将是 @ 987654327@(更好的主意)或403 Forbidden(更糟的主意)。

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

        看来你不能只用400 Bad Request来处理所有的错误。

        重要的是始终在正文中说明问题到底是什么。

        顺便说一句:403 Forbidden 用于指示与身份验证或授权不一定相关的禁止操作。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-16
          • 2014-08-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-03
          • 2023-03-21
          • 1970-01-01
          相关资源
          最近更新 更多