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

Joh*_*rbe 3 asp.net-mvc-4 asp.net-web-api

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

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

形成响应的最佳方式是什么?我是不是该

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

Cod*_*ter 6

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

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

请参阅RFC 2616 - 超文本传输​​协议 - HTTP/1.1:

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

超文本传输​​协议(HTTP/1.1):语义和内容:

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

REST:映射404 HTTP状态代码:

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

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