【发布时间】:2014-06-09 12:12:54
【问题描述】:
我对返回任务的 webapi 客户端进行了多次调用 像这样的
public async Task<TResp> GetMyThingAsync(TReq req)
{
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(BaseURI);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml"));
await HttpRuntime.Cache.GetToken().ContinueWith((t) =>
{
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("XXX", t.Result);
});
var httpResponseMessage = await client.PostAsXmlAsync<TReq>("This/That/", req);
httpResponseMessage.EnsureSuccessStatusCode();
var resp = await httpResponseMessage.Content.ReadAsAsync<TResp>();
return resp;
}
}
对 api 的调用当然可以返回 500 或其他一些问题。 EnsureSuccessStatusCode() 如果发生类似的事情,显然会抛出,但是对于响应中的任何信息做任何事情都为时已晚。
有没有一个很好的方法来处理这个?
我了解您可以向客户端添加 messageHandler,例如
HttpClient client = HttpClientFactory(new ErrorMessageHandler()) ..
var customHandler = new ErrorMessageHandler()
{ InnerHandler = new HttpClientHandler()};
HttpClient client = new HttpClient(customHandler);
这是要走的路吗? ErroMessageHandler 会是什么样子并会做什么来向调用控制器返回有用的东西...?
非常感谢
自然
【问题讨论】:
标签: asp.net-web-api error-handling async-await dotnet-httpclient