Web API 2.2客户端和反序列化HttpError对象

时间:2015-03-10 17:12:02

标签: c# asp.net-web-api

背景 - 我有一个.Net 4.5 WPF客户端应用程序。 WPF客户端应用程序使用Web API 2.2 Client libraries从asp.net web api服务加载数据。这一切都有效。

我的问题是关于错误处理。

当出现错误时,asp.net web api服务的错误处理会返回HttpError对象。您可以在fiddler中通过电线看到它们,例如:

{ 
  "Message": "An error has occurred.", 
  "ExceptionMessage": "Index was outside the bounds of the array.", 
  "ExceptionType": "System.IndexOutOfRangeException", 
  "StackTrace": "   at WebApiTest.TestController.Post(Uri uri) in c:\\Temp\\WebApiTest\\WebApiTest\\TestController.cs:line 18\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClassf.<GetExecutor>b__9(Object instance, Object[] methodParameters)\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n   at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)" 
}

错误在出现错误时正确返回给客户端,此处没有问题。

问题 - 我的问题是关于反序列化这些错误。 HttpError对象在System.Web.Http程序集中定义,该程序集是Web API Core的一部分。由于我只是使用不依赖于System.Web.Http的Web API客户端库,因此该类不可用。因此我像这样反序列化错误:

error = response.Content.ReadAsAsync<RestError>().Result;

其中RestError是我在我的应用程序中本地定义的类。

public class RestError
{
  public string ExceptionMessage { get; set; }
  public string ExceptionType { get; set; }
  public string Message { get; set; }
  public string StackTrace { get; set; }
}

上述工作但由于HttpError类的重复而感觉错误。

有没有比为HttpError定义我自己的类或将完整的Web API Core添加到我的WPF应用程序更好的解决方案?

1 个答案:

答案 0 :(得分:1)

不,你的方式很好。添加Web API核心对您的客户端应用程序没有意义,因为它仅用于服务器/服务应用程序。