2017-01-20 1 views
0

Я пытаюсь получить ответ от HTTP-запроса, но я, похоже, не могу. Я попытался следующие:Как получить и распечатать ответ от Httpclient.SendAsync call

public Form1() {  

    HttpClient client = new HttpClient(); 
    client.BaseAddress = new Uri("someUrl"); 
    string content = "someJsonString"; 
    HttpRequestMessage sendRequest = new HttpRequestMessage(HttpMethod.Post, client.BaseAddress); 
    sendRequest.Content = new StringContent(content, 
              Encoding.UTF8, 
              "application/json"); 

Отправить сообщение с:

... 
    client.SendAsync(sendRequest).ContinueWith(responseTask => 
    { 
     Console.WriteLine("Response: {0}", responseTask.Result); 
    }); 
} // end public Form1() 

С помощью этого кода я получаю обратно код состояния и некоторые данные заголовка, но я не вернусь сам ответ. Я попытался также:

HttpResponseMessage response = await client.SendAsync(sendRequest); 

, но я тогда сказал, чтобы создать метод асинхронной как следующий, чтобы сделать его работу

private async Task<string> send(HttpClient client, HttpRequestMessage msg) 
{ 
    HttpResponseMessage response = await client.SendAsync(msg); 
    string rep = await response.Content.ReadAsStringAsync(); 
} 

Это предпочтительный способ отправить «HttpRequest», получим и распечатать ответ? Я не уверен, какой метод правильный.

+1

Нет неправильного или правильного способа для этого. В зависимости от вашего приложения, оба имеют смысл. Если вы не уверены, я лично рекомендую подход async/wait. –

+0

Невозможно иметь весь код внутри конструктора, я полагаю? Я просто тестирую api в данный момент. – jones

+0

Я не уверен, в чем проблема с упомянутыми решениями, но вы также можете просто использовать свойство результата. var response = client.SendAsync (sendRequest) .Result; Обратите внимание, что вы «теряете» асинхронность при таком подходе. Это блокировка (например, ожидание). –

ответ

0

здесь является способ использования HttpClient, и это должно прочитать ответ запроса, в случае, если статус 200 возвращения запрос (запрос не является BadRequest или NotAuthorized)

string url = 'your url here'; 

using (HttpClient client = new HttpClient()) 
{ 
    using (HttpResponseMessage response = client.GetAsync(url).Result) 
    { 
      using (HttpContent content = response.Content) 
      { 
       var json = content.ReadAsStringAsync().Result; 
      } 
    } 
} 

и для более подробной информации и чтобы узнать, как использовать async/await с HttpClient, вы можете прочитать подробную информацию о this answer

+0

вы может захотеть связать использование, чтобы уменьшить вложенность. –

+0

kinda, что я понял, в конце концов, я верю, приветствия. – jones

Смежные вопросы