当找到一个路由/网址而不是它背后的资源时,返回什么?

Eli*_*eth 3 c# asp.net-web-api asp.net-web-api2

当路径 customer/1 存在但客户搜索背后的资源/实体不存在时,

我应该返回 404 吗?我的意思是路线存在...

或者我应该返回一个

204(无内容),因为我找不到客户,结果为空。

微软示例:

public IHttpActionResult Get (int id)
{
    Product product = _repository.Get (id);
    if (product == null)
    {
        return NotFound(); // Returns a NotFoundResult
    }
    return Ok(product);  // Returns an OkNegotiatedContentResult
}
Run Code Online (Sandbox Code Playgroud)

在我看来 NotFound() => 404 在这里不正确?!

澄清/改进我的问题。

我需要区分一个

1) 路线:customer/1 => 路线不存在

(我会在这里返回 404,但这无论如何都是由框架处理的......)

2) 路由:customer/1 => 存在但数据库中的资源/实体不存在

(我会在这里返回 404)

3) 路由:customersSearch/searchterm => 未找到数据库中的资源/实体

(我会返回 204 )

请您善待并纠正您对这个更明确问题的回答好吗?

小智 5

通用 REST 指南指出,在这种情况下,您应该返回 404。您请求了一个不存在的特定资源。就好像您从网站上请求了物理文档一样。

在我所有的工作场所,都是由企业架构团队发布的模式:)

一个建议的话...有某种形式的日志记录这种情况,这样你就可以检测“逻辑”404(在这种情况下)与真正的没有资源/处理程序/脚本映射可用于服务请求!至少在部署时识别问题:)

  • 2xx 是“这是你的数据”,4xx 是“客户端做了坏事”,5xx 是“服务器做了坏事”。客户端请求的数据不存在,因此 404 似乎是正确的选择。 (2认同)