Web API 2.2 客户端和反序列化 HttpError 对象
Web API 2.2 Client and deserializing HttpError objects
背景 - 我有一个 .Net 4.5 WPF 客户端应用程序。 WPF 客户端应用程序使用 Web API 2.2 Client libraries 从 asp.net web api 服务加载数据。这一切都有效。
我的问题是关于错误处理的。
asp.net web api 服务 returns 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 核心的一部分。由于我只是使用不依赖于 System.Web.Http 的 Web API 客户端库,因此 class 不可用。因此我像这样反序列化错误:
error = response.Content.ReadAsAsync<RestError>().Result;
其中 RestError 是 class 我在我的应用程序中本地定义的。
public class RestError
{
public string ExceptionMessage { get; set; }
public string ExceptionType { get; set; }
public string Message { get; set; }
public string StackTrace { get; set; }
}
以上有效,但由于 HttpError class 的重复而感觉不对。
是否有比为 HttpError 定义我自己的 class 或将完整的 Web API Core 添加到我的 WPF 应用程序更好的解决方案?
不,你的方式很好。添加 Web API 核心对您的客户端应用程序没有意义,因为它仅适用于 server/service 应用程序。
背景 - 我有一个 .Net 4.5 WPF 客户端应用程序。 WPF 客户端应用程序使用 Web API 2.2 Client libraries 从 asp.net web api 服务加载数据。这一切都有效。
我的问题是关于错误处理的。
asp.net web api 服务 returns 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 核心的一部分。由于我只是使用不依赖于 System.Web.Http 的 Web API 客户端库,因此 class 不可用。因此我像这样反序列化错误:
error = response.Content.ReadAsAsync<RestError>().Result;
其中 RestError 是 class 我在我的应用程序中本地定义的。
public class RestError
{
public string ExceptionMessage { get; set; }
public string ExceptionType { get; set; }
public string Message { get; set; }
public string StackTrace { get; set; }
}
以上有效,但由于 HttpError class 的重复而感觉不对。
是否有比为 HttpError 定义我自己的 class 或将完整的 Web API Core 添加到我的 WPF 应用程序更好的解决方案?
不,你的方式很好。添加 Web API 核心对您的客户端应用程序没有意义,因为它仅适用于 server/service 应用程序。