use*_*862 2 .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);
}
Run Code Online (Sandbox Code Playgroud)
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!"));
}
}
Run Code Online (Sandbox Code Playgroud)
再次在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);
}
Run Code Online (Sandbox Code Playgroud)
但是挡块根本没有被击中.我只能访问response.IsSuccessStatusCode
但这样我无法从webservice返回到客户端的详细消息异常(我想显示详细的消息).
从Content属性中读取错误消息.
if (response.IsSuccessStatusCode)
{
...
} else {
var errorMessage = response.Content.ReadAsStringAsync().Result;
}
Run Code Online (Sandbox Code Playgroud)
并根据需要格式化字符串.
参考:(在文章中搜索"反序列化响应内容").
ASP.NET Web Api:解开HTTP错误结果和模型状态字典客户端
归档时间: |
|
查看次数: |
2620 次 |
最近记录: |