Partager via


Exemple de WebContentTypeMapper

L’exemple WebContentTypeMapper montre comment associer de nouveaux types de contenu aux formats de corps de message de Windows Communication Foundation (WCF).

L’élément WebHttpEndpoint se connecte à l’encodeur de messages Web, ce qui permet à WCF de recevoir des messages binaires JSON, XML ou bruts au même point de terminaison. L’encodeur détermine le format du corps du message en examinant le type de contenu HTTP de la requête. Cet exemple introduit la WebContentTypeMapper classe, qui permet à l’utilisateur de contrôler le mappage entre le type de contenu et le format de corps.

WCF fournit un ensemble de mappages par défaut pour les types de contenu. Par exemple, application/json mappe au format JSON et text/xml mappe au code XML. Tout type de contenu qui n’est pas mappé au format JSON ou XML est mappé au format binaire brut.

Dans certains scénarios (par exemple, les API de type push), le développeur de services ne contrôle pas le type de contenu retourné par le client. Par exemple, les clients peuvent retourner JSON comme text/javascript au lieu de application/json. Dans ce cas, le développeur de services doit fournir un type qui dérive de WebContentTypeMapper pour gérer correctement le type de contenu donné, comme indiqué dans l’exemple de code suivant.

public class JsonContentTypeMapper : WebContentTypeMapper
{
    public override WebContentFormat
               GetMessageFormatForContentType(string contentType)
    {
        if (contentType == "text/javascript")
        {
            return WebContentFormat.Json;
        }
        else
        {
            return WebContentFormat.Default;
        }
    }
}

Le type doit remplacer la GetMessageFormatForContentType(String) méthode. La méthode doit évaluer l’argument contentType et retourner l’une des valeurs suivantes : Json, , Xmlou RawDefault. Lorsque cette méthode retourne la valeur Default, les mappages d'encodeur de message Web par défaut sont utilisés. Dans l’exemple de code précédent, le text/javascript type de contenu est mappé au format JSON et tous les autres mappages restent inchangés.

Pour utiliser la JsonContentTypeMapper classe, utilisez ce qui suit dans votre Web.config:

<system.serviceModel>
  <standardEndpoints>
    <webHttpEndpoint>
      <standardEndpoint name="" contentTypeMapper="Microsoft.Samples.WebContentTypeMapper.JsonContentTypeMapper, JsonContentTypeMapper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </webHttpEndpoint>
  </standardEndpoints>
</system.serviceModel>

Pour vérifier l’exigence d’utilisation de JsonContentTypeMapper, supprimez l’attribut contentTypeMapper du fichier de configuration ci-dessus. La page cliente ne parvient pas à se charger lors de la tentative d’utilisation text/javascript pour envoyer du contenu JSON.

Pour configurer, générer et exécuter l’exemple

  1. Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.

  2. Générez la solution WebContentTypeMapperSample.sln comme décrit dans Génération des exemples Windows Communication Foundation.

  3. Accédez à http://localhost/ServiceModelSamples/JCTMClientPage.htm (n’ouvrez pas JCTMClientPage.htm dans le navigateur à partir du répertoire du projet).