HttpClient в контенте c # http - PullRequest
       23

HttpClient в контенте c # http

0 голосов
/ 21 марта 2019

Я пытаюсь отправить JSON на определенный локальный сайт, но я почему-то не могу сделать это правильно.У меня проблема в строке PostAsync:

Cannot implicitly convert type 'System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage>' to 'System.Net.Http.HttpResponseMessage

Я не знаю, как исправить конверсию, спасибо за любую помощь.

using (HttpClient client = new HttpClient())
{
    try
    {
        StringContent json = new StringContent(jsonText, Encoding.UTF8, "application/json");
        HttpResponseMessage response = client.PostAsync("http://www.localhost.com/", json);
        response.EnsureSuccessStatusCode();
        string responseBody =  response.Content.ReadAsStringAsync();
        // Above three lines can be replaced with new helper method below
        // string responseBody = await client.GetStringAsync(uri);

        Console.WriteLine(responseBody);
    }
    catch (HttpRequestException e)
    {
        Console.WriteLine("\nException Caught!");
        Console.WriteLine("Message :{0} ", e.Message);
    }
}

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

При выполнении асинхронных вызовов функций вы должны await завершить задачу, прежде чем получите фактическое возвращаемое значение функции.

Также обратите внимание, что если у вашего метода есть хотя бы один await, вы должны украсить свой метод ключевым словом async .

Ниже приведен рабочий пример кода.

using (HttpClient client = new HttpClient())
{
    try
    {
        StringContent json = new StringContent(jsonText, Encoding.UTF8, "application/json");
        HttpResponseMessage response = await client.PostAsync("http://www.localhost.com/", json);
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        // Above three lines can be replaced with new helper method below
        // string responseBody = await client.GetStringAsync(uri);

        Console.WriteLine(responseBody);
    }
    catch (HttpRequestException e)
    {
        Console.WriteLine("\nException Caught!");
        Console.WriteLine("Message :{0} ", e.Message);
    }
}

Существует множество хороших вопросов и ответов, касающихся проблемы асинхронности / ожидания, один хороший пример здесь .

0 голосов
/ 21 марта 2019

попробуйте добавить await в ваш PostAsync и ReadAsStringAsync С наилучшими пожеланиями.

...