Как я могу получить информацию из Задачи httpResponse? - PullRequest
0 голосов
/ 13 января 2020

Я вызываю API с асинхронным c методом, метод возвращает информацию, которая мне нужна в задаче, но я не могу отобразить необходимую информацию в текстовом поле winform.

Вот метод:


public static async Task<Token> GetTokenAsync()
        {
            Token token = new Token();
            string path = @"URL";
            using (var client = new HttpClient())
            {
                //URL + HEADER DE LA REQUETE
                client.BaseAddress = new Uri(path);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                //MIS EN FORME DU JSON D'AUTHENTIFICATION
                var requestBody = new
                {
                    username = "DSAE_PHID_RECETTE",
                    password = "testpwd1"
                };

                //ENVOIE DE LA REQUETE ET RECUPERATION DE LA REPONSE
                HttpResponseMessage apiResponse = await client.PostAsJsonAsync(client.BaseAddress, requestBody);

                //RECUPERATION DES INFORMATION DU RETOUR DE L'API
                if (apiResponse.IsSuccessStatusCode)
                {
                    var response = await apiResponse.Content.ReadAsStringAsync();
                    token.idToken = response;
                    return token;
                }
                else
                {
                    return null;
                }

            }

А вот попытка отобразить

 private void btnEnvoyer_Click(object sender, EventArgs e)
        {
            Task<Token> tokentask = RequeteHttp.GetTokenAsync();

           // txtResult.Text = tokentask.Result.ToString();

        }

Если я раскомментирую ligne, он зависнет.

Я знаю, что-то там с Задача, которую я не до конца понимаю, но даже со всеми примерами я не могу заставить ее работать.

Заранее спасибо.

1 Ответ

2 голосов
/ 13 января 2020

Обработчики событий - это редкое место, где вам разрешено использовать async void. Поэтому вы должны попробовать что-то вроде этого:

private async void btnEnvoyer_Click(object sender, EventArgs e)
{
    var token = await RequeteHttp.GetTokenAsync();
    txtResult.Text = token.ToString();
}
...