HttpClient读取ASP.NET Web API错误信息的简单方法
2015-08-26 14:56
766 查看
在C#中,用HttpClient调用Web API并且通过Content.ReadAsStringAsync()读取响应内容时,如果出现500错误(InternalServerError),会得到一个包含错误信息的json字符串:
这样一个复杂的字符串可读性很差,通常只需要部分信息(比如ExceptionMessage)就可以知道错误的情况。
那如何读取所需的部分信息呢?
开始用的是 Microsoft.AspNet.WebApi.Client + dynamic,实现代码如下:
后来一想,这个json字符串也是某种类型的实例序列化出来的,找到这个类型,然后直接反序列化这个类型的实例,岂不更简单。
找了找,发现原来就是Microsoft.AspNet.WebApi.Core中的HttpError:
于是改用下面更简单的实现代码:
注:需要nuget安装Microsoft.AspNet.WebApi.Client与Microsoft.AspNet.WebApi.Core
{ "Message":"An error has occurred.", "ExceptionMessage":"", "ExceptionType":"", "StackTrace":"", "InnerException": { "Message":"", "ExceptionMessage":"", "ExceptionType":", "StackTrace":"", "InnerException": { "Message":"", "ExceptionMessage":"", "ExceptionType":"", "StackTrace":"" } } }
这样一个复杂的字符串可读性很差,通常只需要部分信息(比如ExceptionMessage)就可以知道错误的情况。
那如何读取所需的部分信息呢?
开始用的是 Microsoft.AspNet.WebApi.Client + dynamic,实现代码如下:
var response = await _httClient.GetAsync(url); dynamic content = await response.Content.ReadAsAsync<ExpandoObject>(); Console.WriteLine(content.ExceptionMessage);
后来一想,这个json字符串也是某种类型的实例序列化出来的,找到这个类型,然后直接反序列化这个类型的实例,岂不更简单。
找了找,发现原来就是Microsoft.AspNet.WebApi.Core中的HttpError:
namespace System.Web.Http { [XmlRoot("Error")] public sealed class HttpError : Dictionary<string, object>, IXmlSerializable { public HttpError(); public HttpError(string message); public HttpError(ModelStateDictionary modelState, bool includeErrorDetail); public HttpError(Exception exception, bool includeErrorDetail); public string ExceptionMessage { get; set; } public string ExceptionType { get; set; } public HttpError InnerException { get; } public string Message { get; set; } public string MessageDetail { get; set; } public HttpError ModelState { get; } public string StackTrace { get; set; } public TValue GetPropertyValue<TValue>(string key); } }
于是改用下面更简单的实现代码:
var response = await _httClient.GetAsync(url); Console.WriteLine((await response.Content.ReadAsAsync<HttpError>()).ExceptionMessage);
注:需要nuget安装Microsoft.AspNet.WebApi.Client与Microsoft.AspNet.WebApi.Core
相关文章推荐
- Fetching https://dl-ssl.google.com/android/
- 通过httpclient向服务器传送数据并获得返回值
- Tomcat配置HTTPS
- 网络敲诈勒索案:不交保护费 就让你服务器瘫痪
- netty4发送HttpRequest及HttpReponse太大的问题(半包)
- Neural Networks for Machine Learning by Geoffrey Hinton (6)
- [python] TCP客户端/服务器端
- 设置网络:跳转至系统设置页
- Android学习笔记:Andorid网络请求框架Volley的使用(中)--网络图片加载
- Angular 设置http
- unity3d的网络使用的简单Demo
- 在Ubuntu QML应用中使用WebSocket建立TCP/IP连接
- 我的openwrt学习笔记(二十二):网络时间同步
- Android中解决网络连接异常
- Android OkHttp完全解析 是时候来了解OkHttp了
- 打开tcp_tw_recycle引起的一次投诉分析
- XMLHTTPRequest状态status完整列表
- 我的openwrt学习笔记(二十一):广域网IP地址获取_socket http
- get/post方式调用http接口
- tcp_tw_recycle和tcp_timestamps导致connect失败问题