Bonjour à tous !

J'essaie depuis plusieurs heure d'afficher dans une textbox d'un winform, un retour d'appel asynchrone d'une API.

Voici ma fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
         static HttpClient client = new HttpClient();
 
        public static async Task<Token> GetTokenAsync(string path)
        {
            Token token = null;
 
            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 = "test",
                    password = "testpwd1"
                };
                //ENVOIE DE LA REQUETE
                HttpResponseMessage apiResponse = await client.PostAsJsonAsync(client.BaseAddress, requestBody);
 
                //RECUPERATION DES INFORMATION DU RETOUR DE L'API
                if (apiResponse.IsSuccessStatusCode)
                {
                    var documentResponse = await apiResponse.Content.ReadAsStringAsync();
                    dynamic response = JsonConvert.DeserializeObject(documentResponse);
                    token.idToken = response[0].Value;
                }
            }
            return token;
        }
Elle fonctionne trés bien, je vois la valeur dont j'ai besoin, seulement lorsque j'essaie de récuperer cette valeur pour l'afficher dans la textbox, le winform freeze.

Voici mon dernier essai en date :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
private void btnEnvoyer_Click(object sender, EventArgs e)
        {
            string path = textBoxURL.Text;
 
            if (cbTypeWS.Text == "TOKEN")
            {
                Task<Token> token = RequeteHttp.GetTokenAsync(path);
 
                string result = token.GetAwaiter().GetResult().ToString();
 
                txtResult.Text = result;
            }
        }
De ce que je comprend il s'agit d'une task qui bloque quelquepart mais malgré mes recherches et tentative je n'y arrive pas.

Merci d'avance