2016-10-31 45 views
1

我使用HttpClient調用此Web API的Web API總是返回我已經拋出

using (var client = new HttpClient(new HttpClientHandler() { Credentials = _credentials })) 
      { 
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));      
       return await client.PostAsJsonAsync(controlActionPath, entityObject); 
      } 

的Web API控制器我扔波紋錯誤內部服務器錯誤,而不是錯誤:

throw new DuplicateNameException("User already exists."); 

然而網絡應用程序總是收到內部服務器錯誤,而不是DuplicateNameException

如果有人建議什麼纔是從Web API獲取確切異常回到Web應用程序的最佳方法,將會有所幫助。

+2

您在控制器拋出的異常必須按順序轉換成HTTP消息回到你的客戶端。默認情況下,Web API正在處理異常並將其封裝在HTTP狀態代碼500(內部服務器錯誤)中,然後可能會執行一些操作,例如在響應正文中爲異常寫入堆棧跟蹤。 我不知道如何在響應中得到確切的異常,而不需要執行序列化異常,返回它,然後在客戶端反序列化它。 – ivanPfeff

+0

您可以發佈Web API操作方法的代碼嗎? – Win

回答

3

由於您正在拋出異常,它會自動變爲內部服務器錯誤,因爲它仍在您的內部服務器端代碼中。您可以在this answer創建一個異常處理程序狀或作爲Web API documentation on exception handling中詳細描述您可以拋出一個特定HttpResponseException類型:

var response = new HttpResponseMessage(HttpStatusCode.BadRequest) 
{ 
    ReasonPhrase = "User already exists." 
}; 

throw new HttpResponseException(response); 
相關問題