Я пытаюсь получить ответ от 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», получим и распечатать ответ? Я не уверен, какой метод правильный.
Нет неправильного или правильного способа для этого. В зависимости от вашего приложения, оба имеют смысл. Если вы не уверены, я лично рекомендую подход async/wait. –
Невозможно иметь весь код внутри конструктора, я полагаю? Я просто тестирую api в данный момент. – jones
Я не уверен, в чем проблема с упомянутыми решениями, но вы также можете просто использовать свойство результата. var response = client.SendAsync (sendRequest) .Result; Обратите внимание, что вы «теряете» асинхронность при таком подходе. Это блокировка (например, ожидание). –