【问题标题】:How do I get results from my http response?如何从我的 http 响应中获取结果?
【发布时间】: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(...) 作为项目列表后,我想直接从响应中获取项目列表。

没有更简单的方法吗?

【问题讨论】:

    标签: http response


    【解决方案1】:

    我还没有测试过,但我认为你的代码应该是这样的:

    var result = await client.SendAsync(requestJSONString)
    

    添加await 后,您的数据应该在result 中。

    【讨论】:

      【解决方案2】:

      这似乎对我不起作用。

      我这样放了两行代码:

              result = await client.SendAsync(securityTokenRequest);
              var result2 = ((Task<HttpResponseMessage>)result).Result;
      

      我在每一个上都设置了断点。我没有到达第二个断点。对 SendAsync 的调用只是挂起,就像请求在发送到 API 的途中丢失了一样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-06-28
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多