【问题标题】:WebApi response codesWebApi 响应代码
【发布时间】:2014-11-12 18:50:17
【问题描述】:

假设我有一个名为 UsersController 的 WebApi 控制器。我们来看下面的例子:

1.导航到 /Users/1 返回 ID = 1 的用户的 JSON。HTTP 响应代码将为 200。

2.导航到 /User/1(注意我拼错了 URL!)将返回响应代码 404。我什至不需要做任何事情,我的网络服务器将为我返回代码 404。

现在的问题是:如果数据库中不存在 ID = 2 的用户,URL /Users/2 应该返回什么响应代码(200 或 404)?以及为什么。

【问题讨论】:

    标签: asp.net-web-api


    【解决方案1】:

    您应该返回 NotFound (404),因为 url 有效但所需的资源不存在。检查this

    【讨论】:

    • 谢谢奥马尔,我希望得到这样的答复。让我们让它更有趣一点: - WebApi 还允许通过 PUT 编辑用户。 - 用户属于团队。 - 我正在尝试编辑 UserId = 1,将他从 TeamId = 5 移动到 TeamId = 6。现在我们可以有 3 个场景:1. API 的使用者请求错误的 URL 2. UserId = 1 已被删除 3. 新场景:TeamId = 6 已被删除 我应该为第 3 个场景返回 404 吗?对于“未找到网络资源”返回 404 似乎更合乎逻辑,对于任何已处理的场景(如“用户已删除”或“团队已删除”)返回 200 似乎更合乎逻辑
    • 对于场景3,您必须检查和调查的情况将无穷无尽,因为如果此用户有地址或任何其他实体,您还需要检查这些行的存在像(AddressId = 10),所以我要做的是1.实现与我的用户表的并发2.让数据库保存失败,因为TeamId 6将不存在并且保存外键将因此而失败。跨度>
    • 同意你所说的一切——问题是这如何转化为关于响应代码的决策?对我来说,如果我的代码处理非标准场景(未找到用户或未找到团队或未找到其他任何内容),总是返回 200 看起来更合乎逻辑,并让我的 Web 服务器在消费者请求 Web 资源的情况下返回 404在web服务器上找不到,和我的业务逻辑没有关系。
    • 当然,您必须处理在服务器端遇到的异常和错误,并将其包装为具有状态和错误列表的对象,您可以将其发送回客户端,因此如果遇到并发问题,例如,您可以将状态发送为错误并发送一些错误消息告诉客户端请求失败的原因,如果成功则将状态发送为成功,但在这两种情况下,您都可以返回 200 作为状态代码。希望对您有所帮助。
    • 再一次,您所说的如何转换为 HTTP 响应代码?例如。我想为我在业务逻辑中处理的每个场景返回 200,并且只返回 404 和 500 之类的代码,用于相应的未找到的 Web 资源和未处理的异常。
    猜你喜欢
    • 2022-01-05
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多