web-dev-qa-db-fra.com

Rendre le client HTTP synchrone: attendre la réponse

J'ai un fichier à télécharger et certains fichiers ont échoué car le message est asynchrone et non synchrone.

J'essaie de faire cet appel en tant qu'appel synchronisé ..

Je veux attendre la réponse.

Comment puis-je faire cet appel en tant que synchrone?

static async Task<JObect> Upload(string key, string url, string 
                                 sourceFile, string targetFormat)
{ 
    using (HttpClientHandler handler = new HttpClientHandler { 
                                           Credentials = new NetworkCredential(key, "") 
                                       })
    using (HttpClient client = new HttpClient(handler))
    {
         var request = new MultipartFormDataContent();
         request.Add(new StringContent(targetFormat), "target_format");
         request.Add(new StreamContent(File.OpenRead(sourceFile)),
                                       "source_file",
                                        new FileInfo(sourceFile).Name);

        using (HttpResponseMessage response = await client.PostAsync(url,
                                                           request).ConfigureAwait(false))

        using (HttpContent content = response.Content)
        {
            string data = await content.ReadAsStringAsync().ConfigureAwait(false);
            return JsonObject.Parse(data);
        }
    }
}

Toute aide appréciée!

28
Alon Shmiel

changement

await content.ReadAsStringAsync().ConfigureAwait(false)

à

content.ReadAsStringAsync().Result

readAsStringAsync renvoie un objet Task. le '.Result' à la fin de la ligne indique au compilateur de renvoyer la chaîne interne.

50
michael berezin

Ça devrait le faire:

static async Task<JObect> Upload(string key, string url, string 
                             sourceFile, string targetFormat)
{ 
    using (HttpClientHandler handler = new HttpClientHandler { 
                                           Credentials = new NetworkCredential(key, "") 
                                   })
    using (HttpClient client = new HttpClient(handler))
    {
         var request = new MultipartFormDataContent();
         request.Add(new StringContent(targetFormat), "target_format");
         request.Add(new StreamContent(File.OpenRead(sourceFile)),
                                   "source_file",
                                    new FileInfo(sourceFile).Name);

        using (HttpResponseMessage response = await client.PostAsync(url,request))

        using (HttpContent content = response.Content)
        {
            string data = await content.ReadAsStringAsync();
            return JsonObject.Parse(data);
        }
    }
}
1
NCC-2909-M