2015-01-07 90 views
0

我從webApi返回異常,並希望相應地捕捉它們。如何從.NET Web API捕獲異常

的的WebAPI的代碼如下所示:

try 
{ 
    _sessionProvider.Login(sessionId, user); 
} 
catch (UserLimitExceededException ex) 
{ 
    return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex); 
} 

當我使用.NET的HttpClient調用此的WebAPI我想抓住這個異常,並正確識別它。

我該怎麼做?

+1

此代碼示例是否實際基於WebAPI控制器方法本身,還是消費者代碼? – Liath

+0

這是我自己的WebAPI控制器,我正在與 –

回答

0

作爲HttpClient上的異常捕獲響應是不可能的。就HttpClient而言,它只收到來自WebAPI的響應,只有狀態碼是500.

您必須檢查響應中的狀態代碼,並在客戶端進行相應的操作。任何其他將客戶端的響應轉換爲.Net異常的方法都是非標準的。

0

那麼,首先,異常不會傳播到本地.NET意義上的客戶端。沒有「魔術」來實現這一點。

當您致電CreateErrorResponse時,它最終會創建一個HttpResponseMessage,其狀態爲500,其內容將爲HttpError實例,該實例會在線路上創建異常表示。 HttpError將使用內容協商選擇的任何格式化程序進行序列化,例如,如果請求的類型爲application/jsonHttpError將被序列化爲JSON表示。

在客戶端,如果你是.NET,你將不得不檢測500,然後你可以使用httpResponseMessage.Content.ReadAsAsync<HttpError>()將它反序列化爲結構化的東西,然後你可以從中讀取詳細信息。

+0

通信好吧。我希望能夠自動反序列化錯誤異常,如果我得到500回。 –