当搜索操作在asp.net web api调用中找不到元素时,返回NotFound状态代码或状态代码为200的空列表?

时间:2014-01-24 08:47:10

标签: asp.net-mvc-4 asp.net-web-api

像GetEmployees这样的mvc web api调用会搜索员工对象列表但却找不到。 这不是错误条件,因为在业务环境中可以接受列表可以为空。

搜索没有失败,它只是没找到任何东西。

形成回复的最佳方式是什么?我应该

  1. 返回http状态代码为HttpStatusCode.NotFound的响应消息,或
  2. 返回状态代码200并返回一个空列表,或
  3. 别的什么?

1 个答案:

答案 0 :(得分:5)

通过返回404,您说所请求的资源不可用,例如GET /Emplyees/42,其中具有该ID的员工不存在。

您的员工集合确实存在,它只是空的,因此404不合适。

请参阅RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1

  

服务器未找到与Request-URI匹配的任何内容。

Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content

  

404(未找到)状态代码表示源服务器未找到目标资源的当前表示,或者不愿意透露该目标资源是否存在。

REST: Mapping 404 HTTP Status codes

  

如果URL应该返回[...]表示,那么如果代码不存在则应返回404。如果URL返回[...]结果,则它不应返回404。

因此,您可以考虑返回204 No Content,或200,其中包含空体或指示空集合的响应。