У меня есть ASP.NET WebApi, размещенный в Azure. На нем нет аутентификации HTTP Header или Azure API, а сеансы скрипача доказывают, что API полностью функциональен и выплескивает данные по запросу и ожидаемым.Xamarin Forms HttpClient GetAsync
В моих формах Xamarin (PCL, IOS & Android только) PCL проект, я следующий код в классе обслуживания:
public async Task<IEnumerable<Link>> GetCategories()
{
IEnumerable<Link> categoryLinks = null;
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//Using https to satisfy iOS ATS requirements
var response = await client.GetAsync(new Uri("https://myproject.azurewebsites.net/api/contents"));
//response.EnsureSuccessStatusCode(); //I was playing around with this to see if it makes any difference
if (response.IsSuccessStatusCode)
{
var content = response.Content.ReadAsStringAsync().Result;
categoryLinks = JsonConvert.DeserializeObject<IEnumerable<Link>>(content);
}
}
return categoryLinks;
}
Я отлажен код и заметил, что контроль не проходит мимо :
var response = await client.GetAsync(new Uri("https://myproject.azurewebsites.net/api/contents"));
и в результате категорияLinks остается без изменений.
Неужели кто-нибудь сталкивался с этим раньше?
Несколько вещей, чтобы отметить:
Хотя я сомневаюсь, что если есть проблема здесь, но у меня есть класс MainViewModel, который выглядит следующим образом:
public class MainViewModel { private readonly INavigation navigation; private readonly IContentService contentService; public IEnumerable<CategoryItem> Categories { get; set; } public MainViewModel(IContentService contentservice, INavigation nav) { this.navigation = nav; this.contentService = contentservice; SetCategoriesAsync(); } private async Task SetCategoriesAsync() { var response = await this.contentService.GetCategories(); this.Categories = (from c in response select new CategoryItem() { //code removed but you get the idea }).AsEnumerable(); } }
My MainPage.xaml. cs имеет следующие строки в конструкторе. Я не думаю, что здесь есть какая-то проблема.
this.MainViewModel = new MainViewModel(contentService, navService); this.CategoriesList.ItemsSource = this.MainViewModel.Categories;
По this link, я уже добавил ссылки через NuGet в следующих библиотеках в порядке появления: Microsoft.BCL, Microsoft.BCL.Build, Microsoft.Net.Http
I 'm не использует ModernHttpClient. Я планирую сделать это, как только у меня будет HttpClient, поскольку я считаю, что это улучшает производительность.
Любая помощь по этому вопросу будет принята с благодарностью.
Включить все исключения из https://msdn.microsoft.com/en-us/library/x85tt0dd.aspx и посмотреть, есть ли у вас в GetAync. –