web api抛出HttpResponseException以及如何在wpf客户端上接收

时间:2014-12-13 10:10:05

标签: .net wpf asp.net-web-api

从我的wpf客户端

我发送异步请求到web api,在这种情况下应该返回HttpResponseException,所以我试过

HttpResponseMessage response = new HttpResponseMessage();
response = client.GetAsync(url).Result;
if (response.IsSuccessStatusCode)
{
   ...
} else {
    MessageBox.Show("Not active" + response.StatusCode + " : Message - " + response.ReasonPhrase);
}

WebApi方

private void GetData()
{
   try {
      data = RavenSession.Query<myobj>().Take(1024).ToList();
   } catch (WebException) {
         throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.ServiceUnavailable, "Database is not online!"));
   }
}

再次在wpf客户端上我想获取HttpResponseException所以我将第一个代码块包装到try catch块中

try{
    HttpResponseMessage response = new HttpResponseMessage();
    response = client.GetAsync(url).Result;
    if (response.IsSuccessStatusCode)
    {
       ...
    } else {
        MessageBox.Show("Not active" + response.StatusCode + " : Message - " + response.ReasonPhrase);
    }
}
catch(HttpResponseException e){
     MessageBox.Show(e.Message);
}
catch(Exception e){
     MessageBox.Show(e.Message);
}

但是挡块根本没有被击中。我只能访问response.IsSuccessStatusCode但这样我就无法从webservice向客户端返回详细的消息异常(我想显示详细的消息)。

1 个答案:

答案 0 :(得分:5)

阅读Content property

中的错误消息
if (response.IsSuccessStatusCode)
{
   ...
} else {
    var errorMessage = response.Content.ReadAsStringAsync().Result; 
}

并根据需要格式化字符串。

参考:(搜索&#34;反序列化响应内容&#34;在文章中)。

ASP.NET Web Api: Unwrapping HTTP Error Results and Model State Dictionaries Client-Side