【发布时间】:2014-06-04 11:47:09
【问题描述】:
我有一个通过服务代理调用的对 OData Web API 的批处理请求:
_productService.AttachTo("Products", product1);
_productService.UpdateObject(product1);
_productService.AttachTo("Products", product2);
_productService.UpdateObject(product2);
_productService.AttachTo("Products", product3);
_productService.UpdateObject(product3);
_productService.SaveChanges(SaveChangesOptions.Batch);
这会命中 ProductsController 的 patch 方法。如果请求无效,特别是返回 BadRequest 行:
public IHttpActionResult Patch([FromODataUri] int key, Delta<Product> patch)
{
Product product = db.Products.Find(key);
patch.Patch(product);
HttpActionContext actionContext = new HttpActionContext(ControllerContext, Request.GetActionDescriptor());
if (!Configuration.Services.GetBodyModelValidator().Validate(maintenance, typeof(Product), Configuration.Services.GetModelMetadataProvider(), actionContext, String.Empty))
{
return BadRequest(actionContext.ModelState);
}
else
{
引发类型为 DataServiceRequestException 的错误消息。其 Response 属性包含 System.Data.Services.Client.ChangeOperationResponse 的集合。其中的每一个都有 Error、Headers 和 StatusCode 属性。我的问题是错误属性是一个 xml 字符串,例如。
<?xml version="1.0" encoding="utf-8"?>
<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<m:code />
<m:message xml:lang="en-US">The request is invalid.</m:message>
<m:innererror>
<m:message>BookedForDate : 'Booked For Date' must not be empty.
\n</m:message>
<m:type></m:type>
<m:stacktrace></m:stacktrace>
</m:innererror>
</m:error>
我想提取其中的某些部分以返回给客户端。
我是否必须解析 XML,或者有什么方法可以将其作为 Exception 对象返回或将其转换为对象?
感谢您的任何帮助或想法。
【问题讨论】:
标签: c# exception-handling error-handling odata asp.net-web-api2