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:

  1. Cuando se emite una solicitud desde el navegador, el servicio de API web debe devolver JSON en lugar de XML.
  2. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow