2013-11-15 13 views
40

Ich habe this HttpClient von Nuget.Wie posten Daten mit HttpClient?

Wenn ich will Daten bekommen ich es auf diese Weise:

var response = await httpClient.GetAsync(url); 
var data = await response.Content.ReadAsStringAsync(); 

Aber das Problem ist, dass ich nicht weiß, wie die Daten zu schreiben? Ich muss eine Post-Anfrage senden und diese Werte hinein senden: comment="hello world" und questionId = 1. Das können Eigenschaften einer Klasse sein, ich weiß es nicht.

Aktualisieren Ich weiß nicht, wie diese Werte zu HttpContent hinzufügen, wie Post-Methode es braucht. httClient.Post(string, HttpContent);

+0

kann mir niemand helfen? :) – user2970840

+0

Haben Sie versucht, die Post-Methode zu verwenden? – Patrick

+0

Sie sollten der Dokumentation folgen, welche Inhalte Sie in Ihrem Post senden sollten (wenn Sie einer API folgen). Dann fülle einfach einen HttpContent und benutze [PostAsync] (http://msdn.microsoft.com/en-us/library/hh138190 (v = vs.110) .aspx) hast du das versucht? – Patrick

Antwort

85

Sie müssen verwenden:

await client.PostAsync(uri, content); 

So etwas:

var comment = "hello world"; 
var questionId = 1; 

var formContent = new FormUrlEncodedContent(new[] 
{ 
    new KeyValuePair<string, string>("comment", comment), 
    new KeyValuePair<string, string>("questionId", questionId) 
}); 

var myHttpClient = new HttpClient(); 
var response = await myHttpClient.PostAsync(uri.ToString(), formContent); 

Und wenn u die Antwort nach der Post erhalten müssen, sollten Sie verwenden:

var stringContent = await response.Content.ReadAsStringAsync(); 

Hoffe es hilft;)

+0

Antwort ist 'Unprocessable entry'. vielleicht habe ich einen Fehler woanders – user2970840

+6

oder kürzere Wörterbuch wörtlich: 'var Formcontent = new FormUrlEncodedContent (new Dictionary { { "Kommentar", Kommentar}, { "QuestionID", QuestionID} }); ' – hkarask

-2

Verwenden Sie UploadStringAsync-Methode:

 WebClient webClient = new WebClient(); 
     webClient.UploadStringCompleted += (s, e) => 
      { 
       if (e.Error != null) 
       { 
        //handle your error here 
       } 
       else 
       { 
        //post was successful, so do what you need to do here 
       } 

      }; 


     webClient.UploadStringAsync(new Uri(yourUri), UriKind.Absolute), "POST", yourParameters);  
+2

danke, aber ich denke, dass' HttpClient' ist besser als 'WebClient'. einfacher und sauberer. nicht wahr? – user2970840

+0

Ah ja, ich bin so an den WebClient gewöhnt, das hatte ich in meinem Kopf, als ich die Frage gelesen habe. Ich habe HttpClient noch nicht benutzt. Es tut uns leid! –