首页 > 解决方案 > 如何从任务 httpResponse 中获取信息?

问题描述

我正在使用异步方法调用 API,该方法返回我在任务中需要的信息,但我无法在 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();

        }

如果我取消注释它会冻结的线。

我知道任务中有一些我不完全理解的东西,但即使有所有的例子,我也无法让它工作。

提前致谢。

标签: c#winformstaskhttpresponse

解决方案


事件处理程序是很少见的地方,您可以在其中使用async void. 所以你应该尝试这样的事情:

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

推荐阅读