¿Poner contenido en el objeto HttpResponseMessage?
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.
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.
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.
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" ) };
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.