如何从我的http响应中获得结果?

时间:2018-01-25 18:30:53

标签: http response

我正试图弄清楚这个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(...)作为项目列表调用之后,我想直接从响应中获取项目列表。

有没有更简单的方法呢?

2 个答案:

答案 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的过程中丢失一样。