我正试图弄清楚这个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,然后从响应中获取结果。我也不喜欢json。在我将SendAsync(...)作为项目列表调用之后,我想直接从响应中获取项目列表。
有没有更简单的方法呢?
答案 0 :(得分:0)
我还没有对它进行过测试,但我认为您的代码应该类似于:
var result = await client.SendAsync(requestJSONString)
添加await
后,您应该将数据放在result
。
答案 1 :(得分:0)
这对我来说似乎不起作用。
我放了两行代码:
result = await client.SendAsync(securityTokenRequest);
var result2 = ((Task<HttpResponseMessage>)result).Result;
我在每个上都加了断点。我没有到达第二个断点。对SendAsync的调用只是挂起,就像请求在去往API的过程中丢失一样。