【问题标题】:Accessing contents of HttpResponseMessage访问 HttpResponseMessage 的内容
【发布时间】:2016-06-08 16:56:23
【问题描述】:

我想打印 HTTPResponseMessage 的内容。

class Requests
{
    public static async Task SendRequest(int port, string path, KVPairs kvPairs)
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(BASE_ADDRESS + port);
            var request = new HttpRequestMessage(HttpMethod.Put, path);

            request.Content = new FormUrlEncodedContent(kvPairs);

            ProcessResponse(await client.SendAsync(request));
        }
    }

    public static void ProcessResponse (HttpResponseMessage response)
    {
        Console.WriteLine(response.Content.ReadAsStringAsync());
    }
}

SendRequest 完美运行。但是 ProcessResponse() 打印 System.Threading.Tasks.Task\`1[System.String]

如何访问和打印响应的内容?谢谢!

【问题讨论】:

    标签: c#


    【解决方案1】:

    您需要等待response.Content.ReadAsStringAsync() 返回的任务,这反过来意味着您需要将ProcessResponse 设为async 方法,并在上面等待。否则,您将打印出任务对象本身,这不是您想要的。

    注意下面的 3 个变化(参见 cmets):

    public static async Task SendRequest(int port, string path, KVPairs kvPairs)
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(BASE_ADDRESS + port);
            var request = new HttpRequestMessage(HttpMethod.Put, path);
    
            request.Content = new FormUrlEncodedContent(kvPairs);
    
            await ProcessResponse(await client.SendAsync(request)); // added await here
        }
    }
    
    public static async Task ProcessResponse (HttpResponseMessage response) // added async Task here
    {
        Console.WriteLine(await response.Content.ReadAsStringAsync()); // added await here
    }
    

    【讨论】:

    • 尝试这样做会在await ProcessResposne(await client.SendAsync(request)) 上引发编译器错误。不能等待无效。将 void 更改为 Task 修复问题。谢谢!
    【解决方案2】:

    此解决方案应该适合您。 Deserialize JSON to Array or List with HTTPClient .ReadAsAsync using .NET 4.0 Task pattern

    您应该使用 await 或 wait() 来获取响应,然后像这样处理它:

    var jsonString = response.Content.ReadAsStringAsync();
    
    jsonString.Wait();
    
    model = JsonConvert.DeserializeObject<List<Job>>(jsonString.Result);
    

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 1970-01-01
      • 2015-03-03
      • 2014-05-02
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      相关资源
      最近更新 更多