2016-06-08 6 views
0

Я хотел бы напечатать содержимое HTTPResponseMessage.Доступ к содержимому 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]

Как я могу получить доступ и распечатать содержимое ответа? Спасибо!

ответ

1

Вам необходимо подождать задания, возвращенной response.Content.ReadAsStringAsync(), что, в свою очередь, означает, что вам необходимо сделать ProcessResponse метод async и ждать этого. В противном случае вы сами распечатываете объект задачи, который вам не нужен.

Обратите внимание на 3 изменения ниже (см комментарии):

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 
} 
+0

Попытка это вызывает ошибку компиляции на 'ждут ProcessResposne (ждут client.SendAsync (запрос))' , Не может ждать пустоты. Изменение проблемы void to Task устраняет проблему. Спасибо! –

+1

@ Даниэль: Исправлено, спасибо, что упомянули об этом. – sstan

0

Это решение должно работать для вас. Deserialize JSON to Array or List with HTTPClient .ReadAsAsync using .NET 4.0 Task pattern

Вы должны использовать ждать или ждать(), чтобы получить ответ, а затем обработать его так:

var jsonString = response.Content.ReadAsStringAsync(); 

jsonString.Wait(); 

model = JsonConvert.DeserializeObject<List<Job>>(jsonString.Result); 
Смежные вопросы