【发布时间】:2015-12-28 08:40:39
【问题描述】:
我有一个 webAPI 2 控制器,目前它正在引发异常,并在响应消息中将其发送回客户端。 500 内部服务器错误,它自身的异常被序列化,我可以在提琴手中看到它的 json 表示。 (json粘贴在下面)
我一直在尝试找到一种方法将此异常反序列化回一个 .NET 异常对象,但不断收到错误消息:
“未找到成员 'ClassName'。”
目前在我的客户端中,我正在尝试通过以下代码反序列化异常。
if (apiResponse.ResponseCode.Equals(500)) // Unhandled exception on server
{
var exceptionObject = await response.Content.ReadAsAsync<Exception>();
}
如何在客户端应用程序上正确反序列化此异常对象?理想情况下,我应该能够取回原来的 System.InvalidOperationException` 对象。
下面是我试图反序列化的响应,如在提琴手中捕获的那样:
HTTP/1.1 500 内部服务器错误 缓存控制:无缓存 Pragma:无缓存 内容类型:应用程序/json;字符集=utf-8 过期:-1 服务器:Microsoft-IIS/10.0 X-AspNet-版本:4.0.30319 X-Powered-By: ASP.NET 日期:格林威治标准时间 2015 年 9 月 30 日星期三 13:43:42 内容长度:1556
{"Message":"发生错误。","ExceptionMessage":"UrlHelper.Link 不得返回 null。","ExceptionType":"System.InvalidOperationException","StackTrace":" 在 System.Web .Http.Results.CreatedAtRouteNegotiatedContentResult
1.Execute()\r\n at System.Web.Http.Results.CreatedAtRouteNegotiatedContentResult1.ExecuteAsync(CancellationToken cancelToken)\r\n at System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 来自先前位置的堆栈跟踪结束抛出异常的位置 ---\r\n System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n System. Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\r\n--- 从先前引发异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Web.Ht tp.Filters.AuthorizationFilterAttribute.d__2.MoveNext()\r\n--- 从先前引发异常的位置结束堆栈跟踪---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) \r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"}
【问题讨论】:
-
你为什么想要那个?这样您就可以将您的实现与服务器紧密耦合。
标签: c# json asp.net-web-api asp.net-web-api2