¿Cómo consigo que la API web ASP.NET devuelva JSON en lugar de XML usando Chrome?

Resuelto naspinski asked hace 12 años • 29 respuestas

Al utilizar la API web ASP.NET más nueva , en Chrome veo XML. ¿Cómo puedo cambiarlo para solicitar JSON y poder verlo en el navegador? Creo que es solo una parte de los encabezados de la solicitud, ¿estoy en lo cierto?

naspinski avatar Mar 24 '12 06:03 naspinski
Aceptado

Nota: Lea los comentarios de esta respuesta, puede producir una vulnerabilidad XSS si está utilizando el manejo de errores predeterminado de WebAPI

Simplemente agrego lo siguiente en App_Start / WebApiConfig.csclase en mi proyecto MVC Web API .

config.Formatters.JsonFormatter.SupportedMediaTypes
    .Add(new MediaTypeHeaderValue("text/html") );

Eso garantiza que obtenga JSON en la mayoría de las consultas, pero puede obtenerlo XMLcuando envía text/xml.

Si necesita la respuesta Content-Type, application/jsonconsulte la respuesta de Todd a continuación .

NameSpaceesta usando System.Net.Http.Headers.

Felipe Leusin avatar Nov 07 '2012 20:11 Felipe Leusin

Si hace esto en el, WebApiConfigobtendrá JSON de forma predeterminada, pero aún le permitirá devolver XML si lo pasa text/xmlcomo Acceptencabezado de solicitud.

Nota: Esto elimina el soporte paraapplication/xml

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
    }
}

Si no está utilizando el tipo de proyecto MVC y, por lo tanto, no tenía esta clase para empezar, consulte esta respuesta para obtener detalles sobre cómo incorporarla.

Glenn Slaven avatar Sep 19 '2012 02:09 Glenn Slaven

El uso de RequestHeaderMapping funciona aún mejor, porque también establece el Content-Type = application/jsonencabezado de respuesta, lo que permite a Firefox (con el complemento JSONView) formatear la respuesta como JSON.

GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings
.Add(new System.Net.Http.Formatting.RequestHeaderMapping("Accept", 
                              "text/html",
                              StringComparison.InvariantCultureIgnoreCase,
                              true, 
                              "application/json"));
dmit77 avatar Sep 26 '2014 20:09 dmit77