我有一个Web API 2 OData服务,如果有问题,我会返回包含ODataError的HttpResponseException,例如
public ActionResult Post(Customer entity)
{
try
{
Repository.Save(entity);
}
catch (Exception ex)
{
throw ODataException(500, ex);
}
}
protected virtual Exception ODataException(HttpStatusCode code, string message = null, Exception ex = null, IList<ODataErrorDetail> details = null)
{
return ODataException(code, code.ToODataError(message, ex, details, !Request.ShouldIncludeErrorDetail()));
}
protected virtual Exception ODataException(HttpStatusCode code, ODataError error)
{
var message = Request.CreateErrorResponse(code, error);
return new HttpResponseException(message);
}
如其他地方所述,Error Handling for ASP.NET OData Web API,因为OData V3有一个标准的序列化响应,看起来像这样......
{
"error": {
"code": "A custom error code",
"message": {
"lang": "en-us",
"value": "A custom long message for the user."
},
"innererror": {
"trace": [...],
"context": {...}
}
}
}
然而,似乎并不是将响应转换回ODataError的简单方法。
现在我可以编写一个自定义JSON转换器来执行此操作,但奇怪的是OData库中没有这个。
答案 0 :(得分:0)
有一个非常标准的库可以通过NuGet添加,名为Newton Json Converter。可以找到文档here
反序列化示例:
string json = @"{
"error": {
"code": "A custom error code",
"message": {
"lang": "en-us",
"value": "A custom long message for the user."
},
"innererror": {
"trace": [...],
"context": {...}
}
}
}";
var oDataError = JsonConvert.DeserializeObject<ODataError>(json);