在 Web API 中提供了 HttpResponseMessage 與 HttpResponseException 用於處理返回訊息,HttpResponseMessage 用於返回一個來自於客戶端的請求結果訊息,你可以使用 HttpResponseMessage 自訂返回的內容,HttpResponseException 則是以當發生例外時用來返回客戶端錯誤訊息,例如一個 404 或 500 錯誤。
其實用 HttpResponseMessage 也能夠返回 404、500 等錯誤,那為何還需要使用 HttpResponseException 來返回錯誤? 參考此文章 提出了一個觀點,文章中提到當呼叫 Web API 服務時發生了與預期上不同的錯誤時,理當應該中止程序返回錯誤訊息,這時對於錯誤的返回就該使用 HttpResponseException,而使用 HttpResponseMessage 則是代表着當客戶端發送了一個工作請求而 Web API 正確的完成了這個工作,就能夠使用 HttpResponseMessage 返回一個 201 的訊息,所以 HttpResponseMessage 與 HttpResponseException 在使用上根本的目標就是不同的,用 HttpResponseMessage 去返回一個例外錯誤也會讓程序結構難以辨別且不夠清晰,接着讓我們看一下 HttpResponseMessage 與 HttpResponseException 的操作方式。 www.it165.net
HttpResponseMessage
HttpResonseMessage 用來響應訊息並包含狀態碼及數據內容,如需要返回一個 HttpResonseMessage 的實例可以使用 Request 的擴充功能 CreateResponse 方法,如下
public HttpResponseMessage DeleteProductById(int id) { return Request.CreateResponse(HttpStatusCode.OK); }
當然也可以自行定義響應的狀態碼及數據內容,如下
public HttpResponseMessage DeleteProductById(int id) { // do something... var response = Request.CreateResponse(HttpStatusCode.OK); response.StatusCode = HttpStatusCode.OK; response.Content = new StringContent("Delete Success!"); // 響應內容 return response; }
如果需要響應列舉對象可以使用 ObjectContent<T>,如下