Ich habe ein ASP.NET WebApi in Azure gehostet. Es gibt keine HTTP-Header-basierte oder Azure-API-Authentifizierung auf ihm und Fiddler-Sitzungen beweisen, dass die API voll funktionsfähig ist und spuckt Daten wie angefordert und erwartet aus.Xamarin Formulare HttpClient GetAsync
In meiner Xamarin Formen (PCL, iOS & nur Android) PCL-Projekt, ich habe in einer Serviceklasse den folgenden Code ein:
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;
}
ich den Code und bemerkte gedebuggt haben, dass die Steuerung nicht vorbei geht :
var response = await client.GetAsync(new Uri("https://myproject.azurewebsites.net/api/contents"));
und als Ergebnis bleibt categoryLinks null.
Hat jemand schon mal darüber gestolpert?
Ein paar Dinge zu beachten:
Obwohl ich, wenn es Zweifel irgendein Problem hier, aber ich habe eine MainViewModel Klasse, sieht wie folgt aus:
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(); } }
Mein MainPage.xaml. cs hat die folgenden Zeilen im Konstruktor. Ich denke nicht, dass es auch hier ein Problem gibt.
this.MainViewModel = new MainViewModel(contentService, navService); this.CategoriesList.ItemsSource = this.MainViewModel.Categories;
Per this link, ich habe bereits Referenzen über nuget auf die folgenden Bibliotheken in der Reihenfolge des Erscheinens hinzugefügt: Microsoft.BCL, Microsoft.BCL.Build, Microsoft.Net.Http
I verwende den ModernHttpClient noch nicht. Ich plane dies zu tun, sobald ich HttpClient arbeite, da ich glaube, dass es die Leistung verbessert.
Jede Hilfe zu diesem wird sehr geschätzt.
Aktivieren Sie alle Ausnahmen von https://msdn.microsoft.com/en-us/library/x85tt0dd.aspx und sehen Sie, ob Sie eine auf dem 'GetAsync' erhalten. –