根据this blog post,我可以在我的ApiController中创建一个错误响应,为客户端提供有用的信息,如下所示:
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不太熟悉,所以对于那些人来说这可能是显而易见的 - 在这种情况下,感谢所有建议。
答案 0 :(得分:2)
HttpError可从客户端反序列化。您可以使用它来读取错误响应中的数据。