SendAsync
的{{1}}方法会返回HttpClient
。
我要做的是让Task<HttpResponseMessage>
包装此任务并将响应转换为Task<T>
的实例。例如,如果我希望响应包含T
的JSON表示,我会这样:
SomeCustomObject
我似乎无法实现这一点。
答案 0 :(得分:1)
沿着这些方向的东西可能会削减芥末:
public async Task<T> GetAsT<T> (HttpRequestMessage request)
{
HttpResponseMessage apiCall = await Client.SendAsync(request);
string data = await apiCall.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(data);
}
或者如果你想阻止方法内部并且没有消费者等待它:
public T GetAsT<T> (HttpRequestMessage request)
{
HttpResponseMessage apiCall = Client.SendAsync(request).Result;
string data = apiCall.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject<T>(data);
}
答案 1 :(得分:0)
我会做这样的事情
public static class HttpRequestMessageExtensions
{
public static async Task<T> GetAsT<T>(this HttpRequestMessage request)
{
using (var client = new HttpClient())
{
var response = await client.SendAsync(request);
return await response.Content.ReadAsAsync<T>();
}
}
}
并像
一样使用它var obj = new HttpRequestMessage(...).GetAsT<SomeCustomObject>();