0
我有以下的WebAPI行动:投射到正确的类型?
public async Task<IHttpActionResult> PostCustomer(DTO.Customer customer)
{
try
{
//Save in Db here...
return Ok(customer);
}
catch (ValidationException<CustomerError> vex)
{
return ResponseMessage(Request.CreateResponse(HttpStatusCode.Conflict, vex));
}
catch (DatabaseException dex)
{
return ResponseMessage(Request.CreateResponse(HttpStatusCode.Conflict, dex));
}
catch (Exception ex)
{
return InternalServerError(ex);
}
}
动作可以返回一个更新的客户DTO或不同的异常(ValidationException和DatabaseException是自定义例外)。
我有一个通用的请求类,用下面的方法Save
:
public virtual T Save(T current)
{
response = client.PostAsJsonAsync<T>(updateUrl, current).Result;
return Response();
}
private T Response()
{
if (response.IsSuccessStatusCode)
{
var result = response.Content.ReadAsAsync<T>().Result;
original = result.DeepCopy<T>();
return result;
}
else
{
dynamic e = response.Content.ReadAsAsync<ExpandoObject>().Result;
//throw ??
}
}
要测试的代码中,我阅读的内容为ExpandoObject
,但显然这不是正确的解决方案。
如何才能知道响应具有哪种类型的异常,以便我可以将正确的异常转换/转发到调用表单?
EnsureSuccessStatusCode()抛出一个例外是代码!= 200它不会抛出异常由网页API发送。 – 2015-02-11 13:25:02
你不会在服务端捕获webapi动作方法上抛出的异常,但在这种情况下,你可以设置httpstatus代码,何时在客户端抛出httclception可以通过在webapi方法上设置的状态代码来处理它 – puko 2015-02-11 16:43:36