【发布时间】:2018-01-25 18:30:52
【问题描述】:
我试图弄清楚这个 HttpClient 是如何工作的。特别是,我试图弄清楚如何从响应中获取结果。
我有一个向 Web API 发送请求的控制器。
这是处理请求的 API 函数:
public async Task<HttpResponseMessage> GetProjects()
{
// Get a list of projects.
// Convert projects from Entity Framework entities to ViewModels.
return Request.CreateResponse(HttpStatusCode.OK, projectModelList);
}
这是我发送请求的方式:
var client = new HttpClient();
client.BaseAddress = new Uri(APIBaseAddress);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
...
var requestJSONString = new HttpRequestMessage(HttpMethod.Get, url);
result = client.SendAsync(requestJSONString).Result;
我得到的结果没有项目列表。我看起来像这样:
如何从响应中获取项目列表?
到目前为止我一直在这样做:
var jsonStringTask =
client.SendAsync(requestJSONString).ContinueWith(jsonStringResponse =>
{
var jsonStringTask2 = jsonStringResponse.Result.Content.ReadAsStringAsync().ContinueWith(jsonStringResponse2 =>
{
jsonString = jsonStringResponse2.Result;
});
jsonStringTask2.Wait();
});
^ 但这似乎有点矫枉过正。为什么我必须在响应上运行 ContiueWith,然后在第一个 ContinueWith 的结果上运行 ContinueWith AGAIN,然后从响应中获取结果。我也不喜欢json。在我调用 SendAsync(...) 作为项目列表后,我想直接从响应中获取项目列表。
没有更简单的方法吗?
【问题讨论】: