Я хочу вызвать веб-API через задачу C#, но не могу получить возвращаемый результат, хотя он переходит к указанному мной URL-адресу для получения значений.
Я неправильно реализую асинхронный и ожидающий метод?
Ниже мой код:
Веб-API с префиксом маршрута:
[RoutePrefix("api/values")]
Ниже приведен метод внутри веб-API:
[Route("Developer")]
[HttpGet]
public Task<List<string>> Developer()
{
var developer = new List<string> { "Developer", "Developer" };
return Task.FromResult(developer);
}
Контроллер
private async Task<List<string>> Developer()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:52717/");
var response = await client.GetAsync("api/values/Developer");
if (response.IsSuccessStatusCode)
return new List<string>();
throw new Exception("Unable to get the values");
}
}
public ActionResult Index()
{
Task.WaitAll(Developer());
return View();
}
Всякий раз, когда я запускаю браузер, он переходит в Index () и переходит к Developer (), однако он продолжает зависать и загружаться до тех пор, пока не будет вызван var response = await client.GetAsync("api/values/Developer")
и не пройдет весь путь до return Task.FromResult(developer);
, и он продолжает зависает и загружается до конца.
Кто-нибудь знает, как заставить веб-API вернуться к вызывающей стороне?
Любая помощь приветствуется.
Спасибо
Привет @BugFinder, я пробовал поместить весь URL-адрес в метод GetAsync
и в метод Uri
, но это не имеет никакого значения.
Да, вы используете async
неправильно: Task.WaitAll
блокирует вашу ветку запросов.
Видите ли вы другое поведение, если вместо установки базового адреса вы выполняете getasync для всего URL-адреса?