Wołam do usługi zewnętrznej przy użyciu HttpClient od wewnątrz ASP.Net MVC projektu Api 4 internetowej uruchomionej na .Net Framework 4.5Wywołanie usługi HTTP zewnętrznych przy użyciu HttpClient z Web API działaniu
Przykładowy kod jest następujący (ignorować wartości zwracanych jest to przykładowy kod, aby przetestować wywołanie usługi zewnętrznej):
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();
}
}
Podczas gdy kod w prywatnej metody rzeczywiście działają mam problem jest, że Wirtualny kontroler() wywołuje GetResponse() ale nie czeka na wynik, ale zamiast tego natychmiast wykonuje powrót z wynikiem = null.
Próbowałem również stosując prostsze synchronicznego połączenia z WebClient następująco:
// GET api/values
public IEnumerable<string> Get()
{
//GetResponse();
var client = new WebClient();
result = client.DownloadString(_address);
return new string[] { result, "value2" };
}
który działa dobrze.
Co robię źle? Dlaczego funkcja Get() nie oczekuje zakończenia metody prywatnej w asynchronicznej próbie?
Nie musisz również wywoływać GetResponse() z oczekiwaniem? W przeciwnym razie to nie będzie czekać na zakończenie tej metody ... a działanie kontrolera zakończy się bezpośrednio, pozostawiając wynik, który będzie nadal pusty. – jishi
Tak, ale nie zdawałem sobie sprawy, że mogę oznaczyć Get() jako asynchroniczną, która jest wymagana do użycia. – Redeemed1