2017-12-17 5 views
0

Ich arbeite an einem persönlichen Projekt lernen auf Xamarin. Also versuche ich im Grunde einige Daten von einer API zu bekommen. Also muss die Methode "POST" sein und auch ein paar Header senden. Die Antwort sollte ein Token und eine Liste von Dingen sein. Ich habe versucht, meinen Kopf um dieses Problem zu wickeln, aber ich konnte es nicht herausfinden. Ich suchte viel und fand ein paar Dinge, die mich mit meinem Code bekommen hier geholfen:Verwenden Sie Post Request, um Daten abzurufen und eine Liste zurück zu senden

public async Task<List<Things>> GetThingsAsync() 
    { 
     var client = new HttpClient(); 
     client.DefaultRequestHeaders.Add("xxx", "xxx"); 
     client.DefaultRequestHeaders.Add("xxx", xxx); 

     HttpContent content = new StringContent(""); 
     content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 

     var json = await client.PostAsync("https://blabla/bla/", content); 

     var br = JsonConvert.DeserializeObject<List<Things>>(json); 
     return br; 

    } 

Rückkehr der br wird diesen Fehler erzeugen:

Error CS1503 Argument 1: cannot convert from 'System.Net.Http.HttpResponseMessage' to 'string'

ich JsonSerializerSettings versucht mit, aber ich konnte nicht finde es heraus. Also Leute, bin ich auf dem richtigen Weg? Fehle ich etwas oder ist diese Vorgehensweise völlig falsch ?! Danke im Voraus.

Jason Antwort löste diesen Fall. Jetzt über zu einer anderen Seite navigiert verwende ich diesen Befehl ein:

der Daten Die Bindung muss bei der Singlepage gemacht werden, aber es wirft mich eine Ausnahme, wenn ich wieder die br

Antwort

1

PostAsync ein HttpResponseMessage zurückgibt, die Sie können verwenden, um den tatsächlichen Inhalt der Antwort abzurufen

var client = new HttpClient(); 
    client.DefaultRequestHeaders.Add("xxx", "xxx"); 
    client.DefaultRequestHeaders.Add("xxx", xxx); 

    HttpContent content = new StringContent(""); 
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 

    var response = await client.PostAsync("https://blabla/bla/", content); 

    response.EnsureSuccessStatusCode(); 

    string json = await response.Content.ReadAsStringAsync(); 
    var br = JsonConvert.DeserializeObject<List<Things>>(json); 
    return br; 
+0

Sind Sie sicher, dass Ihr JSON richtig deserialisiert wird? Sie müssen versuchen, die tatsächliche zugrunde liegende Ausnahme abzufangen. Es gibt mehrere Beiträge hier und anderswo zum Umgang mit der nicht hilfreich "Break State" Nachricht – Jason

+0

eine Seite ist nur eine Klasse, können Sie Daten über den Konstruktor, eine öffentliche Eigenschaft, eine öffentliche Methode usw. übergeben. Haben Sie tatsächlich den Debugger verwendet Durch den Code gehen, die Deserialisierung überprüfen und feststellen, welche Zeile den Absturz verursacht hat. – Jason

+0

Ja natürlich tat ich. Der JSON, den ich bekomme, ist gültig und der Crush passiert, sobald ich "Return Br" betrete. Ich habe bereits versucht, das JSon zu validieren und es ist gültig. Ich dachte, es hätte etwas mit der GetThingsCommand-Schnittstelle zu tun. :/ –

Verwandte Themen