c# - consumir - Hacer que el cliente http sea sincrónico: esperar respuesta
httpclient c# post (2)
Deberias hacer eso:
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);
}
}
}
Tengo algún archivo para cargar y algunos de los archivos fallaron porque la publicación es asíncrona y no síncrona.
Estoy tratando de hacer esta llamada como llamada sincronizada ..
Quiero esperar la respuesta.
¿Cómo puedo hacer esta llamada como síncrona?
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);
}
}
}
Cualquier ayuda apreciada!
cambio
await content.ReadAsStringAsync().ConfigureAwait(false)
a
content.ReadAsStringAsync().Result
ReadAsStringAsync devuelve un objeto de tarea. el ''.Resultar'' al final de la línea le dice al compilador que devuelva la cadena interna.