2013-09-24 2 views
148

Die PostAsync braucht einen anderen Parameter, der HttpContent sein muss.Wie richte ich HttpContent für meinen zweiten HttpClient PostAsync-Parameter ein?

Wie richte ich einen HttpContent ein? Es gibt keine Dokumentation überall, die für Windows Phone 8 funktioniert.

Wenn ich GetAsync tun, funktioniert es gut! aber es muss POST mit dem Inhalt von key = „bla“, etwas = „yay“

// EDIT

Vielen Dank für die Antwort sein ... Das funktioniert gut, aber immer noch ein wenige unsures hier:

public static async Task<string> GetData(string url, string data) 
    { 
     data = "test=something"; 

     HttpClient client = new HttpClient(); 
     StringContent queryString = new StringContent(data); 

     HttpResponseMessage response = await client.PostAsync(new Uri(url), queryString); 

     //response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
     response.EnsureSuccessStatusCode(); 
     string responseBody = await response.Content.ReadAsStringAsync(); 

     return responseBody; 
    } 

die Daten „test = etwas“ ich nahm an der api Seite als Post-Daten „test“ abholen würde, offenbar ist es nicht. Zu einem anderen Thema, ich muss möglicherweise ganze Objekte/Arrays durch Post-Daten, so dass ich denke, json wird am besten sein, dies zu tun. Irgendwelche Gedanken darüber, wie ich Postdaten durchstelle?

Vielleicht so etwas wie:

class SomeSubData 
{ 
    public string line1 { get; set; } 
    public string line2 { get; set; } 
} 

class PostData 
{ 
    public string test { get; set; } 
    public SomeSubData lines { get; set; } 
} 

PostData data = new PostData { 
    test = "something", 
    lines = new SomeSubData { 
     line1 = "a line", 
     line2 = "a second line" 
    } 
} 
StringContent queryString = new StringContent(data); // But obviously that won't work 

Antwort

89

Dies wird in einigen der Antworten auf Can't find how to use HttpContent sowie in diesem blog post beantwortet.

Zusammenfassend können Sie keine Instanz HttpContent direkt einrichten, da es sich um eine abstrakte Klasse handelt. Sie müssen je nach Bedarf eine der daraus abgeleiteten Klassen verwenden. Höchstwahrscheinlich StringContent, mit dem Sie den Zeichenfolgenwert der Antwort, die Codierung und den Medientyp im Konstruktor festlegen können. Siehe: http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent.aspx

+2

Ich werde das überprüfen. Ich denke, wenn ich das herausfinde, muss ich das irgendwo hinstellen, wo jeder es sehen kann! Das hat mich seit 4 Tagen dazu gebracht, eine einfache REST zu einer API zu bekommen. – Jimmyt1988

+0

Der StringContent funktionierte gut, aber eigentlich kann er die PostData nicht zu der Seite bringen, die ich gerade anrufe: D. Ich bearbeite die Frage, um Ihnen zu zeigen, was ich jetzt gerade habe – Jimmyt1988

+2

Eine schnelle Antwort auf "wie poste ich eine JSON-Repräsentation meiner Klasse" ist "serialisieren das Objekt zu JSON, wahrscheinlich mit JSON.Net", aber das gehört wirklich dazu eine separate Frage. –

29

zu Preston Antwort hinzuzufügen, hier ist die komplette Liste der HttpContent abgeleiteten Klassen in der Standardbibliothek:

Credit: https://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-classes-message-content/

Kredit: https://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-classes-message-content/

Es gibt auch einen vermeintliches ObjectContent aber ich konnte es in ASP.NET Core nicht finden.

Natürlich könnte man die ganze HttpContent Sache alle zusammen mit Microsoft.AspNet.WebApi.Client Erweiterungen überspringt (Sie werden einen Import zu tun haben, um es für die jetzt in ASP.NET-Core zu arbeiten: https://github.com/aspnet/Home/issues/1558) und dann kann man Dinge tun, wie :

var response = await client.PostAsJsonAsync("AddNewArticle", new Post 
{ 
    Title = "New Article Title", 
    Body = "New Article Body" 
}); 
Verwandte Themen