2012-06-21 14 views
91

Sto cercando di utilizzare HttpContent:Non riesci a trovare come utilizzare HttpContent

HttpContent myContent = HttpContent.Create(SOME_JSON); 

... ma io non sto avendo alcuna fortuna trovare la DLL in cui è definito.

In primo luogo, ho provato ad aggiungere riferimenti a Microsoft.Http e System.Net, ma nessuno è nell'elenco. Ho anche provato ad aggiungere un riferimento a System.Net.Http ma la classe HttpContent non è disponibile.

Quindi qualcuno può dirmi dove posso trovare la classe HttpContent?

risposta

-4

La classe is listed as being present nell'assieme System.Net.Http. Si noti che questa classe è nuova per .NET 4.5, quindi è necessario utilizzare quella versione del BCL.

+2

E 'disponibile per .NET 4 anche attraverso il pacchetto Microsoft.NET.Http da NuGet –

+78

odio essere pignoli ma data la domanda, questa non è la risposta competitiva? Sure System.Net.Http contiene HttpContent. Ma HttpContent non possiede un metodo Create. Dovrai utilizzare una delle classi derivate (http://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-classes-message-content/) come StringContent. Per esempio. new StringContent (SOME_JSON) – 6footunder

+9

@ 6footunder Non è affatto schizzinoso, questa risposta non è corretta. –

0

Il System.Net.Http namespace (in cui risiede HttpContent classe) è nuovo per .Net 4.5, stai usando un VS2012 RC?

Altrimenti, non avresti accesso a questo.

6

Mentre la versione finale del HttpContent e l'intero spazio dei nomi System.Net.Http verranno con .NET 4.5, è possibile utilizzare una versione di .NET 4 aggiungendo il pacchetto Microsoft.Net.Http da NuGet

97

Per prendere il commento di 6footunder e trasformarlo in una risposta, HttpContent è astratta quindi è necessario utilizzare una delle classi derivate:

enter image description here

+2

grazie, dove hai preso questa foto? – JBJumboJB

+0

Sembra che abbia utilizzato la funzionalità "Class Diagram" di Visual Studio (fare clic con il tasto destro del mouse sul progetto, Aggiungi elemento, Diagramma classi), quindi passare a Esplora soluzioni e espandere Riferimenti per ottenere i diagrammi delle librerie a cui si fa riferimento. Https: // docs. microsoft.com/en-us/visualstudio/ide/working-with-class-diagrams-class-designer –

+0

@JBJumboJB https://blog.pedrofelix.org/2012/01/16/the-new-system-net- http-classes-message-content/ –

201

Basta usare ...

var stringContent = new StringContent(jObject.ToString()); 
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent); 

Oppure,

var stringContent = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json"); 
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent); 
+0

Il parametro content deve essere IHttpContent e non StringContent. Quando l'ho lanciato all'interfaccia è comunque felice. – micahhoover

+1

Terminato l'utilizzo di HttpStringContent. Non è stato possibile utilizzare la classe StringContent perché PostAsync (o PutAsync nel mio caso) non accetta StringContent anche se lo si esegue su un oggetto IHttpContent. – micahhoover

+1

StringContent funziona con PostAsync per me, ma se desideri o devi utilizzare HttpContent, puoi farlo in questo modo: HttpContent content = new StringContent (jsonString); –

0

Sono abbastanza sicuro che il codice non utilizza la classe System.Net.Http.HttpContent, ma invece Microsoft.Http.HttpContent. Microsoft.Http era lo Starter Kit WCF REST, che non è mai uscito prima di essere inserito in .NET Framework. Puoi ancora trovarlo qui: http://aspnet.codeplex.com/releases/view/24644

Non consiglio di basare il nuovo codice su di esso.

7

Per JSON Messaggio:

var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); 
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent); 

non JSON:

var stringContent = new FormUrlEncodedContent(new[] 
{ 
    new KeyValuePair<string, string>("field1", "value1"), 
    new KeyValuePair<string, string>("field2", "value2"), 
}); 
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent); 

https://blog.pedrofelix.org/2012/01/16/the-new-system-net-http-classes-message-content/

Problemi correlati