No puedo encontrar cómo usar HttpContent

186

Estoy tratando de usar HttpContent:

HttpContent myContent = HttpContent.Create(SOME_JSON);

... pero no tengo suerte de encontrar el archivo DLL donde está definido.

Primero, intenté agregar referencias a Microsoft.Http, así como System.Net, pero tampoco está en la lista. También intenté agregar una referencia System.Net.Httppero la HttpContentclase no está disponible.

Entonces, ¿alguien puede decirme dónde puedo encontrar la HttpContentclase?

usuario1416156
fuente

Respuestas:

-7

La clase aparece como presente en la System.Net.Httpasamblea. Tenga en cuenta que esta clase es nueva para .NET 4.5, por lo que debe usar esa versión de BCL.

dlev
fuente
2
También está disponible para .NET 4 a través del paquete Microsoft.NET.Http de NuGet
Panagiotis Kanavos
121
Odio ser exigente, pero dada la pregunta, ¿esta no es la respuesta competitiva? Sure System.Net.Http contiene HttpContent. Pero HttpContent no posee un método Create. Deberá usar una de las clases derivadas ( pfelix.wordpress.com/2012/01/16/… ) como StringContent. Por ejemplo, la nueva StringContent (SOME_JSON)
6footunder
13
@ 6footunder Eso no es exigente en absoluto, esta respuesta no es correcta.
Aran Mulholland
Puede ver la respuesta de Youngjae a continuación para ver un ejemplo adecuado: stackoverflow.com/a/24474664/21539
Zain Rizvi el
8
Esta respuesta hace dirección de la intención de la OP original de la pregunta que desde mi lectura cuidadosa pide solamente que el HttpContentde clase se puede encontrar. (También tenga en cuenta que el OP aceptó esta respuesta.) Sucede que el OP tuvo un segundo problema (tratar de construir una instancia de HttpClient) que probablemente no fue evidente para el OP hasta después de que se resolvió el problema de referencia de DLL. Algunas de las respuestas aquí abordan ese segundo problema y muchas han encontrado útiles esas respuestas. Finalmente, he editado la pregunta (basada en el texto original del OP) para aclararla.
DavidRR
374

Solo usa...

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

O,

var stringContent = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);
Youngjae
fuente
Dice que el parámetro de contenido debe ser IHttpContent y no StringContent. Sin embargo, cuando lo lanzo a la interfaz es feliz.
micahhoover
3
Terminé usando HttpStringContent. No pude usar la clase StringContent porque PostAsync (o PutAsync en mi caso) no acepta StringContent incluso si lo convierte en un objeto IHttpContent.
micahhoover
44
StringContent funciona para mí con PostAsync, pero si quieres o necesitas usar HttpContent, puedes hacerlo así: HttpContent content = new StringContent (jsonString);
Chris Koester
Sigo viendo esta respuesta a lo que parece ser un problema similar al mío, sin embargo, cuando depuro a través de mis dos API, obtengo un PostAsync ("ruta", StringContent) para disparar, pero cuando golpea la otra API no lo hago tengo un cuerpo para analizar y usar, y al regresar obtengo 500 ... Estoy perdido, ya que parece que lo estoy haciendo así. La única diferencia es que no serializo el objeto ya que ya está serializado cuando lo recibo en la primera API y es un paso simple.
Slagmoth
Esta debería ser la respuesta: /
DanielV
148

Para tomar el comentario de 6footunder y convertirlo en una respuesta, HttpContentes abstracto, por lo que debe usar una de las clases derivadas:

ingrese la descripción de la imagen aquí

Chris S
fuente
55
Parece que utilizó la función "Diagrama de clase" de Visual Studio (haga clic con el botón derecho en su proyecto, Agregar elemento, Diagrama de clase. Luego, puede pasar por el Explorador de soluciones y expandir Referencias para obtener diagramas de las bibliotecas a las que hace referencia). Docs.microsoft.com/en -us / visualstudio / ide / ...
Arin
77

Para la publicación JSON:

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

No 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/

Felipe Deveza
fuente
Estoy tratando de usar su ejemplo "no json", ¿cómo debo leer los datos en el extremo receptor?
Joe
contenido var = espera respuesta.Content.ReadAsStringAsync ();
Felipe Deveza
6

Si bien la versión final de HttpContent y todo el espacio de nombres System.Net.Http vendrá con .NET 4.5, puede usar una versión .NET 4 agregando el paquete Microsoft.Net.Http de NuGet

Panagiotis Kanavos
fuente
0

Estoy bastante seguro de que el código no usa la clase System.Net.Http.HttpContent, sino Microsoft.Http.HttpContent. Microsoft.Http fue el WCF REST Starter Kit, que nunca logró una vista previa antes de ser colocado en .NET Framework. Todavía puedes encontrarlo aquí: http://aspnet.codeplex.com/releases/view/24644

No recomendaría basar un nuevo código en él.

RasmusW
fuente
0

El System.Net.Httpespacio de nombres (donde HttpContentreside la clase) es nuevo en .Net 4.5 , ¿está utilizando un VS2012 RC?

De lo contrario, no tendrías acceso a esto.

EkoostikMartin
fuente