¿Cómo consigo que la API web ASP.NET devuelva JSON en lugar de XML usando Chrome?
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?
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.cs
clase 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 XML
cuando envía text/xml
.
Si necesita la respuesta Content-Type
, application/json
consulte la respuesta de Todd a continuación .
NameSpace
esta usando System.Net.Http.Headers
.
Si hace esto en el, WebApiConfig
obtendrá JSON de forma predeterminada, pero aún le permitirá devolver XML si lo pasa text/xml
como Accept
encabezado 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.
El uso de RequestHeaderMapping funciona aún mejor, porque también establece el Content-Type = application/json
encabezado 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"));