2013-11-15 22 views
40

Ho ricevuto this HttpClient da Nuget.Come pubblicare i dati usando HttpClient?

Quando voglio ottenere i dati lo faccio in questo modo:

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

Ma il problema è che io non so come inviare i dati? Devo inviare una richiesta di posta e inviare questi valori al suo interno: comment="hello world" e questionId = 1. queste possono essere proprietà di una classe, non lo so.

Aggiornamento Non so come aggiungere tali valori a HttpContent come metodo di post ha bisogno. httClient.Post(string, HttpContent);

+0

qualcuno non può aiutare? :) – user2970840

+0

Hai provato a utilizzare il metodo Post? – Patrick

+0

Dovresti seguire la documentazione per quale contenuto dovresti inviare nel tuo post (se stai seguendo un'API). Quindi, basta riempire un HttpContent e usare [PostAsync] (http://msdn.microsoft.com/en-us/library/hh138190 (v = vs.110) .aspx) l'hai provato? – Patrick

risposta

85

è necessario utilizzare:

await client.PostAsync(uri, content); 

Qualcosa del genere:

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); 

E se u bisogno di ottenere la risposta dopo post, è necessario utilizzare:

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

Spero che aiuti;)

+0

è "Registrazione non elaborabile". forse ho un errore da qualche altra parte – user2970840

+6

o più breve dizionario letterale: 'var FormContent = new FormUrlEncodedContent (nuova Dictionary { { "commento", commentare}, { "QuestionID", QuestionID} }); ' – hkarask

-2

Usa il metodo UploadStringAsync:

 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

grazie, ma penso che questo' HttpClient' sia migliore di 'WebClient'. più facile e più pulito. non è vero? – user2970840

+0

Ah sì, sono così abituato a WebClient, ho avuto questo nella mia testa mentre stavo leggendo la domanda. Non ho ancora usato HttpClient. Scusate! –