Recherche…


MediaTypeFormatter Informations de base

MediaTypeFormatter est une classe abstraite à partir de laquelle les classes JsonMediaTypeFormatter et XmlMediaTypeFormatter héritent. Ici, la classe JsonMediaTypeFormatter gère les objets JSON et la classe XmlMediaTypeFormatter gère les objets XML.

Renvoie uniquement JSON, quelle que soit la valeur de l'en-tête Accept:

Pour renvoyer uniquement les objets JSON dans la réponse à la demande de temps, cliquez sur Accepter la valeur d'en-tête de la demande si application/json ou application/xml écrit la ligne suivante dans la méthode Register de la classe WebApiConfig .

config.Formatters.Remove(config.Formatters.XmlFormatter);

Ici, config est un objet de la classe HttpConfiguration . Cette ligne de code supprime complètement XmlFormatter ce qui oblige l'API Web ASP.NET à toujours renvoyer JSON, quelle que soit la valeur de l'en-tête Accept dans la demande du client. Utilisez cette technique lorsque vous souhaitez que votre service ne prenne en charge que JSON et non XML.

Renvoie uniquement le code XML indépendamment de la valeur de l'en-tête Accept:

Pour renvoyer uniquement les objets XML dans la réponse à la demande météo, cliquez sur Accepter la valeur d'en-tête de la demande si application/json ou application/xml écrit la ligne suivante dans la méthode Register de la classe WebApiConfig .

config.Formatters.Remove(config.Formatters.JsonFormatter);

Ici, config est un objet de la classe HttpConfiguration comme décrit ci-dessus. Cette ligne de code supprime complètement JsonFormatter ce qui oblige l'API Web ASP.NET à toujours renvoyer du code XML, quelle que soit la valeur de l'en-tête Accept dans la demande du client. Utilisez cette technique lorsque vous souhaitez que votre service ne prenne en charge que XML et non JSON.

Retourne JSON au lieu de XML:

  1. Lorsqu'une demande est émise par le navigateur, le service API Web doit renvoyer JSON au lieu de XML.
  2. Lorsqu'une requête est émise par un outil tel que le violon, la valeur de l'en-tête Accept doit être respectée. Cela signifie que si l'en-tête Accept est défini sur application / xml, le service doit renvoyer XML et s'il est défini sur application / json, le service doit renvoyer JSON.

Méthode 1:

Incluez la ligne suivante dans la méthode Register de la classe WebApiConfig .

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

Cela indique à l'API Web ASP.NET d'utiliser JsonFormatter lorsque la demande est faite pour text/html qui est la valeur par défaut pour la plupart des navigateurs. Le problème avec cette approche est que l'en Content-Type tête Content-Type de la réponse est défini sur text/html ce qui est trompeur.

Méthode 2:

Utilisez des formateurs personnalisés. Créez une classe dérivée de la classe JsonMediaTypeFormatter et implémentez la méthode SetDefaultContentHeaders .

Voici l'exemple de la classe de formatage JSON personnalisée qui renvoie le format JSON en réponse.

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");
    }
}

Et ceci est l'exemple du formateur de type Custom Media qui renvoie le format CSV en réponse.

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);
        }
    }
}

Après, l'implémentation de la classe de formatage personnalisée l'enregistre dans la méthode Register de la classe WebApiConfig .

config.Formatters.Add(new CustomJsonFormatter());

Maintenant, selon votre formateur, vous obtiendrez une réponse et un Content-Type de Content-Type partir du serveur.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow