Я работаю над доказательством прототипа концепции.
У меня есть веб-форма Asp.Net C# (Visual Studio 2013, .Net 4.5). На кнопке мыши я сделать что-то вроде этого:Использование HttpClient.GetAsync для вызова Web API, похоже, зависает
List<Blog> blogs = null;
protected void btnLoadData_Click(object sender, EventArgs e)
{
//...;
switch (int.Parse(rblDataSource.SelectedValue))
{
//...;
case 4:
RunAsyncBlogs().Wait();
break;
default:
blogs = localGetter.GetBlogs();
break;
}
//...;
}
RunAsyncBlogs выглядит следующим образом:
static async Task RunAsyncBlogs()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost/wapiDemo/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// HTTP GET
HttpResponseMessage response = await client.GetAsync("api/Blogs");
if (response.IsSuccessStatusCode)
{
List<Blog> thisBlogList = await response.Content.ReadAsAsync<List<Blog>>();
var cnt = thisBlogList.Count();
}
}
}
код останавливается в ответ = ждать client.GetAsync вызова. Когда я говорю, что он останавливается, отладчик действует так, как будто запрос завершен, но браузер все еще ждет.
Если я запускаю консольное приложение (копирую и вставляю в него метод RunAsync()), который вызывает Web API одинаково, я получаю свои данные. Итак, я считаю, что приложение веб-API отвечает так, как ожидалось.
@ Downvoter - Серьезно? Позаботьтесь о том, что случилось с ответом? –