Asp.net web api 返回空集合作为web响应的正确状态代码/说明

Asp.net web api 返回空集合作为web响应的正确状态代码/说明,asp.net-web-api,Asp.net Web Api,我有一个方法,可以像这样返回用户购买的所有物品 http://myapihost/items/{user_id} 一些用户不会购买任何项目,因此项目将是items=[] 返回空集合时,正确的响应是什么 //pass empty array with 200 OK Request.CreateResponse(HttpStatusCode.OK, items); 或 使用200 OK传递字符串的问题在于,最终用户将被迫在对列表的响应进行反序列化之前进行另一次检查,因为通常200 OK返回列表

我有一个方法,可以像这样返回用户购买的所有物品

http://myapihost/items/{user_id}
一些用户不会购买任何项目,因此项目将是
items=[]

返回空集合时,正确的响应是什么

//pass empty array with 200 OK
Request.CreateResponse(HttpStatusCode.OK, items);

使用200 OK传递
字符串
的问题在于,最终用户将被迫在对
列表
的响应进行反序列化之前进行另一次检查,因为通常200 OK返回
列表

RFC将无内容定义为

服务器已完成请求,但不需要返回实体主体,并且可能希望返回更新的元信息

所以这个回答不可能是正确的,对吗

RFC将NotFound定义为

服务器未找到任何与请求URI匹配的内容

所以这个回答也不可能是正确的,对吧


或者还有其他响应吗?

出于两个原因,发送空数组是最好的选择

  • 最终客户机总是希望有一个一致的对象,当然它可以为null,但是客户机代码会更干净

  • 对于空情况,通过导线传输的数据将是最小的,而不是发送消息,因为客户端将负责消息和消息显示的语言


  • 这和其他任何事情一样,都是一个品味的问题。我看不出返回一个空集或返回
    NotFound
    @Damien\u有什么不对。不相信的人,我更倾向于返回一个空集。根据规范,
    NotFound
    是否正确?这不是一个类似的问题吗:是否从方法返回“null”或“空列表实例”。就我个人而言,我喜欢保持事情的一致性。我会选择“返回空数组”。基于:-我们确实找到了。。(这是一个空列表,我们想要的是“项目列表”,而不是“迭代器中至少有一个项目”。因此“未找到”感觉是错误的。-客户端不想在这个请求的响应上写“如果”,只是一个一致的“foreach”“项目集合的预期类型是什么。我的2CT。@MarvinSmit:这对我来说是不一样的。我正在寻找最佳实践,我的回答应该是哪种状态!我也在考虑使用空数组200 OK。谢谢
    //pass message with 200 OK
    Request.CreateResponse(HttpStatusCode.OK, "No items were purchased by the user.");
    
    Request.CreateResponse(HttpStatusCode.NoContent, "No items were purchased by the user.");
    
    Request.CreateResponse(HttpStatusCode.NotFound, "No items were purchased by the user.");