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