Utilizando la API web ASP.NET más reciente , en Chrome veo XML: ¿cómo puedo cambiarlo para solicitar JSON para poder verlo en el navegador? Creo que es solo parte de los encabezados de solicitud, ¿estoy en lo cierto?
json
google-chrome
asp.net-web-api
naspinski
fuente
fuente
Respuestas:
Solo agrego lo siguiente en
App_Start / WebApiConfig.cs
clase en mi proyecto MVC Web API .Eso asegura que obtenga JSON en la mayoría de las consultas, pero puede obtenerlo
XML
cuando envíatext/xml
.Si es necesario tener la respuesta
Content-Type
queapplication/json
por favor verifica la respuesta de Todd a continuación .NameSpace
está utilizandoSystem.Net.Http.Headers
.fuente
Content-Type
encabezado de la respuesta seguirá siendotext/html
.Si hace esto en el
WebApiConfig
, obtendrá JSON de forma predeterminada, pero aún le permitirá devolver XML si pasatext/xml
comoAccept
encabezado de solicitudSi no está utilizando el tipo de proyecto MVC y, por lo tanto, no tenía esta clase para comenzar, consulte esta respuesta para obtener detalles sobre cómo incorporarlo.
fuente
application/xml
tienen una prioridad de 0.9 y*/*
una prioridad de 0.8. Al eliminarapplication/xml
, elimina la capacidad de la API web de devolver XML si el cliente lo solicita específicamente. por ejemplo, si se envía "Accept: application / xml" le sigue recibir JSON.El uso de RequestHeaderMapping funciona aún mejor, porque también establece el
Content-Type = application/json
encabezado en la respuesta, lo que permite que Firefox (con el complemento JSONView) formatee la respuesta como JSON.fuente
Me gusta más el enfoque de Felipe Leusin : asegúrese de que los navegadores obtengan JSON sin comprometer la negociación de contenido de los clientes que realmente desean XML. Lo único que me faltaba era que los encabezados de respuesta todavía contenían tipo de contenido: texto / html. ¿Por qué fue eso un problema? Porque uso la extensión JSON Formatter Chrome , que inspecciona el tipo de contenido, y no obtengo el formato bonito al que estoy acostumbrado. Lo arreglé con un formateador personalizado simple que acepta solicitudes de texto / html y devuelve respuestas de aplicación / json:
Regístrese así:
fuente
this.SerializerSettings.Formatting = Formatting.Indented;
si desea que esté bien impreso sin una extensión de navegador.using System.Net.Http.Formatting
yusing Newtonsoft.Json
MVC4 Consejo rápido # 3: eliminar el formateador XML de la API web ASP.Net
En
Global.asax
agregar la línea:al igual que:
fuente
En WebApiConfig.cs , agregue al final de la función Registrar :
Fuente .
fuente
En Global.asax estoy usando el código a continuación. Mi URI para obtener JSON es
http://www.digantakumar.com/api/values?json=true
fuente
Eche un vistazo a la negociación de contenido en WebAPI. Estas ( Parte 1 y Parte 2 ) publicaciones de blog maravillosamente detalladas y exhaustivas explican cómo funciona.
En resumen, tiene razón y solo necesita establecer
Accept
oContent-Type
solicitar encabezados. Dado que su acción no está codificada para devolver un formato específico, puede establecerlaAccept: application/json
.fuente
Como la pregunta es específica de Chrome, puede obtener la extensión Postman que le permite configurar el tipo de contenido de la solicitud.
fuente
network.http.accept.default
configuración atext/html,application/xhtml+xml,application/json;q=0.9,application/xml;q=0.8,*/*;q=0.7
.text/html,application/xhtml+xml;q=1.0,*/*;q=0.7
para evitar que los hosts con errores como Bitbucket sirvan accidentalmente a su navegador JSON en lugar de HTML.Una opción rápida es utilizar la especialización MediaTypeMapping. Aquí hay un ejemplo del uso de QueryStringMapping en el evento Application_Start:
Ahora, siempre que la url contenga la cadena de consulta? A = b en este caso, la respuesta de Json se mostrará en el navegador.
fuente
Este código hace que json sea mi predeterminado y también me permite usar el formato XML. Solo agregaré el
xml=true
.¡Gracias a todos!
fuente
No use su navegador para probar su API.
En su lugar, intente utilizar un cliente HTTP que le permita especificar su solicitud, como CURL o incluso Fiddler.
El problema con este problema está en el cliente, no en la API. La API web se comporta correctamente, de acuerdo con la solicitud del navegador.
fuente
La mayoría de las respuestas anteriores tiene mucho sentido. Como ve que los datos se formatean en formato XML, eso significa que se aplica el formateador XML, así que puede ver el formato JSON simplemente eliminando el XMLFormatter del parámetro HttpConfiguration como
ya que JSON es el formato predeterminado
fuente
Utilicé un filtro de acción global para eliminar
Accept: application/xml
cuando elUser-Agent
encabezado contiene "Chrome":Parece funcionar.
fuente
La aplicación Chrome "Advanced REST Client" me pareció excelente para trabajar con los servicios REST. Puede establecer el tipo de contenido
application/json
entre otras cosas: cliente REST avanzadofuente
El formateador de tipo medio devuelve el formato correcto. Como otros mencionaron, puedes hacer esto en la
WebApiConfig
clase:Para más información, consulte:
En caso de que sus acciones devuelvan XML (que es el caso por defecto) y necesita solo un método específico para devolver JSON, puede usar un
ActionFilterAttribute
y aplicarlo a esa acción específica.Atributo de filtro:
Aplicando a la acción:
Tenga en cuenta que puede omitir la palabra
Attribute
en la decoración de la acción y usar solo en[JsonOutput]
lugar de[JsonOutputAttribute]
.fuente
fuente
según la última versión de ASP.net WebApi 2,
debajo
WebApiConfig.cs
, esto funcionaráfuente
No me queda claro por qué hay toda esta complejidad en la respuesta. Claro que hay muchas maneras de hacer esto, con QueryStrings, encabezados y opciones ... pero lo que creo que es la mejor práctica es simple. Solicitas una URL simple (ej
http://yourstartup.com/api/cars
.:) y a cambio obtienes JSON. Obtiene JSON con el encabezado de respuesta adecuado:Al buscar una respuesta a esta misma pregunta, encontré este hilo y tuve que seguir porque esta respuesta aceptada no funciona exactamente. Encontré una respuesta que creo que es demasiado simple para no ser la mejor:
Establecer el formateador predeterminado de WebAPI
Agregaré mi consejo aquí también.
Tengo una pregunta de dónde provienen los valores predeterminados (al menos los que estoy viendo). ¿Son valores predeterminados de .NET, o tal vez creados en otro lugar (por alguien más en mi proyecto)? De todos modos, espero que esto ayude.
fuente
Aquí hay una solución similar a la de jayson.centeno y otras respuestas, pero usando la extensión integrada de
System.Net.Http.Formatting
.La solución se orientó principalmente a admitir el formato $ para OData en las primeras versiones de WebApi, pero también se aplica a la implementación que no es OData y devuelve el
Content-Type: application/json; charset=utf-8
encabezado en la respuesta.Le permite virar
&$format=json
o&$format=xml
al final de su uri cuando prueba con un navegador. No interfiere con otros comportamientos esperados cuando se utiliza un cliente que no es del navegador donde puede configurar sus propios encabezados.fuente
Puedes usar lo siguiente:
fuente
Simplemente agregue esas dos líneas de código en su clase WebApiConfig
fuente
Simplemente cambias
App_Start/WebApiConfig.cs
así:fuente
Desde MSDN Creación de una aplicación de página única con ASP.NET y AngularJS (aproximadamente 41 minutos).
Debería ser actual, lo probé y funcionó.
fuente
Ha pasado un tiempo desde que se hizo esta pregunta (y se respondió), pero otra opción es anular el encabezado Aceptar en el servidor durante el procesamiento de la solicitud utilizando un MessageHandler como se muestra a continuación:
Donde
someOtherCondition
puede haber cualquier cosa, incluido el tipo de navegador, etc. Esto sería para casos condicionales donde solo a veces queremos anular la negociación de contenido predeterminada. De lo contrario, según otras respuestas, simplemente eliminaría un formateador innecesario de la configuración.Deberá registrarlo, por supuesto. Puedes hacer esto globalmente:
o ruta por ruta:
Y dado que este es un manejador de mensajes, se ejecutará tanto en el final de la solicitud como en el de respuesta de forma similar a un
HttpModule
. Para que pueda reconocer fácilmente la anulación con un encabezado personalizado:fuente
Aquí está la forma más fácil que he usado en mis aplicaciones. Agregar a continuación 3 líneas de código
App_Start\\WebApiConfig.cs
enRegister
funciónLa API web de Asp.net serializará automáticamente su objeto devuelto a JSON y, a medida que
application/json
se agregue en el encabezado, el navegador o el receptor comprenderán que está devolviendo el resultado JSON.fuente
WebApiConfig es el lugar donde puede configurar si desea generar en json o xml. por defecto es xml. en la función de registro podemos usar HttpConfiguration Formatters para formatear la salida. System.Net.Http.Headers => MediaTypeHeaderValue ("text / html") es necesario para obtener la salida en formato json.
fuente
Utilizando la respuesta de Felipe Leusin durante años, después de una actualización reciente de las bibliotecas principales y de Json.Net, me encontré con
System.MissingMethodException
: SupportedMediaTypes. La solución en mi caso, con suerte útil para otros que experimenten la misma excepción inesperada, es instalarSystem.Net.Http
. NuGet aparentemente lo elimina en algunas circunstancias. Después de una instalación manual, el problema se resolvió.fuente
Me sorprende ver tantas respuestas que requieren codificación para cambiar un solo caso de uso (GET) en una API en lugar de usar una herramienta adecuada que debe instalarse una vez y puede usarse para cualquier API (propia o de terceros) y todo casos de uso
Entonces la buena respuesta es:
fuente