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

时间:2015-08-27 14:07:42

标签: c# asp.net asp.net-mvc asp.net-web-api

我希望我的控制器返回HttpResponseMessage为204(NoContent),即找不到所选资源。

通常我会这样编码:

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的人可能已经在MVC 6中解决了这个问题,如ASP.Net Docs

中所述

1 个答案:

答案 0 :(得分:2)

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

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

你做得最好,因为它是控制器类的确切角色。