asp.net-web-api
ASP.NET Web API MediaTypeFormatter
Buscar..
Información básica de MediaTypeFormatter
MediaTypeFormatter es una clase abstracta de la que se heredan las clases JsonMediaTypeFormatter y XmlMediaTypeFormatter . Aquí, la clase JsonMediaTypeFormatter maneja objetos JSON y la clase XmlMediaTypeFormatter maneja objetos XML.
Devuelva solo JSON independientemente del valor del encabezado de aceptación:
Para devolver sólo los objetos JSON en la respuesta del clima petición Aceptar valor de encabezado de la solicitud si application/json o application/xml escribir la siguiente línea en el Register método de WebApiConfig clase.
config.Formatters.Remove(config.Formatters.XmlFormatter);
Aquí, config es un objeto de la clase HttpConfiguration . Esta línea de código elimina por completo XmlFormatter que obliga a la API web de ASP.NET a devolver siempre JSON independientemente del valor del encabezado Aceptar en la solicitud del cliente. Utilice esta técnica cuando desee que su servicio admita solo JSON y no XML.
Solo se devuelve XML independientemente del valor del encabezado de aceptación:
Para devolver sólo los objetos XML en la respuesta del clima petición Aceptar valor de encabezado de la solicitud si application/json o application/xml escribir la siguiente línea en el Register método de WebApiConfig clase.
config.Formatters.Remove(config.Formatters.JsonFormatter);
Aquí, config es un objeto de la clase HttpConfiguration como se describe anteriormente. Esta línea de código elimina por completo JsonFormatter que obliga a la API web de ASP.NET a devolver siempre XML independientemente del valor del encabezado Aceptar en la solicitud del cliente. Utilice esta técnica cuando desee que su servicio admita solo XML y no JSON.
Devuelve JSON en lugar de XML:
- Cuando se emite una solicitud desde el navegador, el servicio de API web debe devolver JSON en lugar de XML.
- Cuando se emite una solicitud desde una herramienta como fiddler, se debe respetar el valor del encabezado Aceptar. Esto significa que si el encabezado Aceptar se establece en application / xml, el servicio debe devolver XML y si se establece en application / json, el servicio debe devolver JSON.
Método 1:
Incluir la línea siguiente en Register método de WebApiConfig clase.
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
Esto le indica a la API web de ASP.NET que use JsonFormatter cuando se realiza una solicitud de text/html que es la predeterminada para la mayoría de los navegadores. El problema con este enfoque es que el encabezado Content-Type de la respuesta se establece en text/html que es engañoso.
Método 2:
Utilice formateadores personalizados. Cree una clase derivada de la clase JsonMediaTypeFormatter e implemente el método SetDefaultContentHeaders .
Este es el ejemplo de la clase del formateador JSON personalizado que devuelve el formato JSON en respuesta.
public class CustomJsonFormatter : JsonMediaTypeFormatter
{
public CustomJsonFormatter()
{
this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
}
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
{
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.ContentType = new MediaTypeHeaderValue("application/json");
}
}
Y este es el ejemplo del formateador de tipo Custom Media que devuelve el formato CSV en respuesta.
public class CSVMediaTypeFormatter : MediaTypeFormatter {
public CSVMediaTypeFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
}
public CSVMediaTypeFormatter(MediaTypeMapping mediaTypeMapping) : this()
{
MediaTypeMappings.Add(mediaTypeMapping);
}
public CSVMediaTypeFormatter(IEnumerable<MediaTypeMapping> mediaTypeMappings) : this()
{
foreach (var mediaTypeMapping in mediaTypeMappings)
{
MediaTypeMappings.Add(mediaTypeMapping);
}
}
}
Después, la implementación de la clase del formateador personalizado se registra en Register método de WebApiConfig clase.
config.Formatters.Add(new CustomJsonFormatter());
Ahora, de acuerdo con su formateador, obtendrá respuesta y Content-Type del servidor.