2015-08-27 68 views
3

我希望我的控制器返回204(NoContent)的HttpResponseMessage,即沒有找到所選資源時。ASP.Net WebApi控制器應該返回204而不是null [HttpResponseMessage]

通常我這樣的代碼是:

public Contracts.IRoom Get(HttpRequestMessage request, int id) 
     { 
      return _RoomRepo.GetAllRooms().Where(r => r.Id == id).FirstOrDefault();    
     } 

但是,這給我的200(OK)的ResponseCode和數據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

通常情況下,如果未找到所選資源,您將返回404 Not Found; 204當您放棄或刪除資源並且不返回任何數據時,通常不會使用內容。如果你的API用於內部消費,那麼你的方法可能是好的,但是如果你的API被其他人使用,那麼你應該更習慣性地使用,或者確保你的文檔非常清楚它返回的是非標準結果碼。 –

回答

1

中所述Web API引擎本身並不會創建所有類型的響應。在你的情況下,它不知道'null'的含義,即使你有多個語句與數據庫交互,其中一些返回null,另一些返回一些數據。因此,在這種情況下,API無法檢測到「NoContent」。

實際上,您必須通過您自己的方式爲正在以簡單易懂的方式使用api的用戶創建響應類型。

你做得最好,因爲它是控制器類的確切角色。

相關問題