¿Poner contenido en el objeto HttpResponseMessage?

Resuelto praetor asked hace 12 años • 8 respuestas

Hace varios meses, Microsoft decidió cambiar la clase HttpResponseMessage. Antes, podías simplemente pasar un tipo de datos al constructor y luego devolver el mensaje con esos datos, pero ya no.

Ahora, necesita usar la propiedad Contenido para establecer el contenido del mensaje. El problema es que es de tipo HttpContent y parece que no puedo encontrar una manera de convertir una cadena, por ejemplo, a HttpContent.

¿Alguien sabe cómo lidiar con este problema? Muchas gracias.

praetor avatar Sep 03 '12 07:09 praetor
Aceptado

Para una cadena específicamente, la forma más rápida es utilizar el constructor StringContent

response.Content = new StringContent("Your response text");

Hay varios descendientes de clases HttpContent adicionales para otros escenarios comunes.

Jim O'Neil avatar Sep 03 '2012 01:09 Jim O'Neil

Debes crear la respuesta usando Request.CreateResponse :

HttpResponseMessage response =  Request.CreateResponse(HttpStatusCode.BadRequest, "Error message");

Puede pasar objetos, no solo cadenas, a CreateResponse y este los serializará según el encabezado Aceptar de la solicitud. Esto le evita tener que elegir manualmente un formateador.

Florin Dumitrescu avatar May 21 '2013 19:05 Florin Dumitrescu

La solución de una sola línea más sencilla es utilizar

return new HttpResponseMessage( HttpStatusCode.OK ) {Content =  new StringContent( "Your message here" ) };

Para contenido JSON serializado:

return new HttpResponseMessage( HttpStatusCode.OK ) {Content =  new StringContent( SerializedString, System.Text.Encoding.UTF8, "application/json" ) };
Simon Mattes avatar Dec 10 '2016 13:12 Simon Mattes

Al parecer la nueva forma de hacerlo se detalla aquí:

http://aspnetwebstack.codeplex.com/discussions/350492

Para citar a Henrik,

HttpResponseMessage response = new HttpResponseMessage();

response.Content = new ObjectContent<T>(T, myFormatter, "application/some-format");

Básicamente, uno tiene que crear un tipo ObjectContent, que aparentemente puede devolverse como un objeto HttpContent.

praetor avatar Sep 03 '2012 00:09 praetor