2012-09-24 40 views
0

this blog post,我可以在我的ApiController錯誤響應,提供給客戶的有用信息,如:如何使用/解析ASP.NET WebApi返回的錯誤?

throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, String.Format("Contact {0} not found.", id))); 

...和客戶端將收到一個「對象」包含錯誤的詳細信息與(在這個例子中)404種狀態一起:

{ 
    "Message": "Contact 22 not found.", 
    "MessageDetail": "<other info - not always present>" 
} 

(我不認爲MessageDetail在這個例子中適當的,因此可能不會被列入,但在其他情況下,它可能是 - 看博客文章)。

聽起來不錯,但我的C#客戶端應用程序在客戶端應該如何消耗?我提出了一個請求,我期待一個JSON編碼的Contact對象作爲響應,但是我得到了不同類型的對象。

因爲響應代碼指示失敗,那麼我想我知道不能指望Contact對象,並且,而不是尋找這個錯誤對象。但考慮到並不是每個錯誤都會返回其中之一,並且還考慮到MessageDetail成員可能會或可能不存在,我怎麼去解析響應? (注意:在我的場景中,它將以JSON編碼,並且我在客戶端使用JSON.NET)。

如果對象是一個衆所周知的類型,那麼我可以只使用JsonConvert.DeserializeObject<T>(),但我不認爲有預定義的類型,如果我創建我自己的類,我該怎麼做可選的MessageDetail會員?

我不是很熟悉,處理JSON,所以這可能是顯而易見的那些誰是 - 在這種情況下,所有建議感激地接受。

回答

2

HttpError是從客戶機側deserializable。您可以使用它從錯誤響應中讀取數據。

+0

+1 HttpError是衆所周知的類型,你是後。一些更多的信息在這裏http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx –

+0

這是在同一條鏈路在我的問題! :-) –

+0

對我來說,問題在於HttpError在System.Net.Http中,這對我的客戶端項目是不可用的......我只是用相關成員創建了它的副本。 –