J'appelle un service externe à l'aide HttpClient à partir d'un projet Web APIs ASP.Net MVC 4 en cours d'exécution sur le Net Framework 4.5Appeler le service HTTP externe à l'aide HttpClient d'une API Web d'action
L'exemple de code est comme suit (ignorer les valeurs de retour comme cela est exemple de code pour tester appeler un service externe):
public class ValuesController : ApiController
{
static string _address = "http://api.worldbank.org/countries?format=json";
private string result;
// GET api/values
public IEnumerable<string> Get()
{
GetResponse();
return new string[] { result, "value2" };
}
private async void GetResponse()
{
var client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(_address);
response.EnsureSuccessStatusCode();
result = await response.Content.ReadAsStringAsync();
}
}
Alors que le code dans la méthode privée ne fonctionne en effet le problème que j'ai est que le Get Controller() appelle la GetResponse() mais il n'attend pas le résultat mais exécute immédiatement le retour avec result = null.
J'ai aussi essayé d'utiliser un simple appel synchrone avec un WebClient comme suit:
// GET api/values
public IEnumerable<string> Get()
{
//GetResponse();
var client = new WebClient();
result = client.DownloadString(_address);
return new string[] { result, "value2" };
}
qui fonctionne très bien.
Qu'est-ce que je fais mal? Pourquoi Get() n'attend pas l'achèvement de la méthode privée dans l'exemple asynchrone?
Sinon, cela n'attendra pas que cette méthode se termine ... et l'action de votre contrôleur finira directement par laisser le résultat être toujours nul. – jishi
Oui mais je n'avais pas réalisé que je pourrais marquer le Get() comme async qui est requis pour utiliser await. – Redeemed1