C# ASP.Net WebApi控制器应返回204而不是null[HttpResponseMessage]

C# ASP.Net WebApi控制器应返回204而不是null[HttpResponseMessage],c#,asp.net,asp.net-mvc,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,我想让我的控制器在未找到所选资源时返回204(无内容)的HttpResponseMessage 通常我是这样编码的: public Contracts.IRoom Get(HttpRequestMessage request, int id) { return _RoomRepo.GetAllRooms().Where(r => r.Id == id).FirstOrDefault(); } 但这给了我一个2

我想让我的控制器在未找到所选资源时返回204(无内容)的HttpResponseMessage

通常我是这样编码的:

public Contracts.IRoom Get(HttpRequestMessage request, int id)
        {
            return _RoomRepo.GetAllRooms().Where(r => r.Id == id).FirstOrDefault();            
        }
但这给了我一个200(Ok)的响应代码和
null的数据

因此,为了实现我所追求的目标,我必须编写代码:

public HttpResponseMessage Get(HttpRequestMessage request, int id)
{
    var room = _RoomRepo.GetAllRooms().Where(r => r.Id == id).FirstOrDefault();
    if (room != null)
        return request.CreateResponse(System.Net.HttpStatusCode.OK, room);
    else
        return request.CreateResponse(System.Net.HttpStatusCode.NoContent, room);
}
有没有更简单的方法?
看起来asp.net的家伙们可能已经在MVC6中解决了这个问题,正如

中所述,Web API引擎本身并不能创建所有类型的响应。在您的例子中,它不知道“null”的含义,即使您有多个与数据库交互的语句,其中一些语句返回null,另一些语句返回一些数据。因此,在这种情况下,API无法检测“NoContent”

实际上,您必须以一种简单易懂的方式为使用您的api的用户创建自己的响应类型


您做得最好,因为这正是控制器类的角色。

当未找到所选资源时,通常会返回404 Not Found;204放置或删除资源且不返回任何数据时,通常不使用任何内容。如果您的API是供内部使用的,那么您的方法可能还可以,但是如果您的API正被其他人使用,那么您应该使用更惯用的用法,或者确保您的文档非常清楚地表明它正在返回非标准的结果代码。