Hace varios meses, Microsoft decidió cambiar la clase HttpResponseMessage. Antes, simplemente podía pasar un tipo de datos al constructor y luego devolver el mensaje con esos datos, pero ya no.
Ahora, debe usar la propiedad Contenido para establecer el contenido del mensaje. El problema es que es del 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.
c#
asp.net-mvc
asp.net-web-api
pretor
fuente
fuente
Debe crear la respuesta usando Request.CreateResponse :
Puede pasar objetos no solo cadenas a CreateResponse y los serializará en función del encabezado Aceptar de la solicitud. Esto le ahorra elegir manualmente un formateador.
fuente
CreateErrorResponse()
si la respuesta es un error, como lo es en el ejemplo de esta respuesta. Dentro de mi try-catch estoy usando:this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "message", exception);
Y esta es la respuesta correcta si le preocupa respetar el encabezado Aceptar de la persona que llama, sin travesuras adicionales (y está usando WebAPI)ApiController
. Si solo estás heredandoController
, no funciona, y tienes que crearlo tú mismo:HttpResponseMessage msg = new HttpResponseMessage(); msg.Content = new StringContent("hi"); msg.StatusCode = HttpStatusCode.OK;
Aparentemente, la nueva forma de hacerlo se detalla aquí:
http://aspnetwebstack.codeplex.com/discussions/350492
Para citar a Henrik,
Básicamente, uno tiene que crear un tipo ObjectContent, que aparentemente puede devolverse como un objeto HttpContent.
fuente
new JsonMediaTypeFormatter();
o similar dependiendo de su formatoObjectContent
no se encuentra, usando WCFLa solución más sencilla de una sola línea es usar
Para contenido JSON serializado:
fuente
Para cualquier objeto T que pueda hacer:
fuente
Request
solo está disponible con unCreateResponse
método si está heredandoApiController
. No funcionará si se usaController
.Puede crear sus propios tipos de contenido especializado. Por ejemplo, uno para contenido Json y otro para contenido Xml (luego simplemente asignarlos al HttpResponseMessage.Content):
fuente
Inspirado por la respuesta de Simon Mattes, necesitaba satisfacer el tipo de retorno requerido de IHttpActionResult de ResponseMessageResult. También usando JsonContent de nashawn, terminé con ...
Ver la respuesta de nashawn para JsonContent.
fuente
No hay duda de que tienes razón Florin. Estaba trabajando en este proyecto y descubrí que este código:
Podría ser reemplazado por:
fuente