type read net negotiation create content available asp c# asp.net asp.net-web-api

c# - read - API web de ASP.NET: no hay ''MediaTypeFormatter'' disponible para leer un objeto de tipo ''Int32''



no mediatypeformatter is available to read an object of type (5)

¿Está colocando el valor int en el cuerpo del mensaje de solicitud? Si es así, ¿cuál es el formato?

Si el tipo de contenido es texto, la API web no sabrá qué hacer con ella, porque la API web no proporciona un formateador de medios para el texto. Puede escribir un formateador personalizado, como lo señaló Despertar.

También puedes hacer algo como esto:

public void Put() { var s = Request.Content.ReadAsStringAsync().Result; }

No estoy completamente seguro de lo que pasó aquí. Puede que haya arruinado las cosas en alguna parte, pero no sé qué.

Mi método de controlador API se ve así:

public HttpResponseMessage<string> Put(int id)

He intentado una cadena también con el mismo error.

¿Algunas ideas?

Gracias.

Edición: para que quede claro, el ID es el parámetro de la ruta. El cuerpo de la solicitud es JSON. Si elimino el parámetro de ruta, el método funciona normalmente.


En una nota al margen ... he visto lanzar este error cuando el servicio comenzó a requerir ''HTTPS''.


Por favor, lea la siguiente entrada del blog:

Esto describe la mayoría de los problemas típicos con el uso de parámetros simples. Sin saber más detalles sobre el aspecto de su solicitud, no es posible determinar a cuál de ellos ha llegado.

ACTUALIZAR

Hay un error más conocido considerando los valores de ruta. En caso de que no se utilice uno de los formateadores integrados para la solicitud POST / PUT / PATCH, los parámetros de los valores de ruta no se están vinculando. Para evitar esto, la mejor solución es escribir ActionFilterAttribute como se describe a continuación:


Publiqué un BORRAR con un cuerpo json y recibí esto. La publicación con parámetros resolvió el problema.


Sorprendentemente, int y string no tienen un MediaTypeFormatter de forma predeterminada, por lo que no sabe cómo manejar esos tipos.

Los únicos tipos que sabe cómo manejar fuera de la caja son JSON, XML y datos codificados en url. Esta cita es del sitio web oficial de asp.net, http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters

En la API web, el tipo de medio determina cómo la API web serializa y deserializa el cuerpo del mensaje HTTP. Existe soporte integrado para datos XML, JSON y de forma urlencoded, y puede admitir tipos de medios adicionales escribiendo un formateador de medios.

Ahora puede escribir su propio MediaTypeFormatter (el enlace que le proporcioné le mostrará cómo), pero como la API web de asp.net todavía está en versión beta, he tenido muchos problemas con el uso de formateadores personalizados para tipos simples como cadenas. Descubrí que es mucho más fácil simplemente ajustar el valor que desea PONER en xml / json y se deserializará automáticamente. Ver mi publicación aquí para obtener más información sobre eso, cuando HTTP-POST tiene cuerpo, el parámetro url es nulo

Para su ejemplo específico, su cuerpo PUT se vería así,

<message> <id>6</id> </message>

Luego, asegúrese de configurar el tipo de contenido de su solicitud http en texto / xml (o application / json si elige usar eso). Y debería serializarse bien en la variable.