我发送异步请求到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向客户端返回详细的消息异常(我想显示详细的消息)。
答案 0 :(得分:5)
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