我希望我的控制器返回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
中所述答案 0 :(得分:2)
Web API引擎本身并不创建所有类型的响应。在您的情况下,它并不知道' null'的含义,即使您有多个与数据库交互的语句,其中一些语句返回null而其他语句返回一些数据。因此,API无法检测到“无内容”。在这种情况下。
实际上,您必须以简单易懂的方式为使用api的用户创建自己的响应类型。
你做得最好,因为它是控制器类的确切角色。