Dela via


WebContentTypeMapper-exempel

Exemplet WebContentTypeMapper visar hur du mappar nya innehållstyper till WCF-meddelandetextformat (Windows Communication Foundation).

Elementet WebHttpEndpoint ansluts i webbmeddelandekodaren, vilket gör att WCF kan ta emot JSON-, XML- eller raw-binära meddelanden på samma slutpunkt. Kodaren avgör brödtextformatet för meddelandet genom att titta på HTTP-innehållstypen för begäran. Det här exemplet introducerar WebContentTypeMapper klassen, vilket gör att användaren kan styra mappningen mellan innehållstyp och brödtextformat.

WCF tillhandahåller en uppsättning standardmappningar för innehållstyper. Till exempel application/json mappar till JSON och text/xml mappar till XML. Alla innehållstyper som inte är mappade till JSON eller XML mappas till ett binärt raw-format.

I vissa scenarier (till exempel push-format-API:er) styr inte tjänstutvecklaren den innehållstyp som returneras av klienten. Klienter kan till exempel returnera JSON som text/javascript i stället för application/json. I det här fallet måste tjänstutvecklaren ange en typ som härleds från WebContentTypeMapper för att hantera den angivna innehållstypen korrekt, enligt följande exempelkod.

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

Typen måste åsidosätta GetMessageFormatForContentType(String) metoden. Metoden måste utvärdera contentType argumentet och returnera något av följande värden: Json, Xml, Raw, eller Default. Returnerar Default defers till standardmappningar för webbmeddelandekodare. I föregående exempelkod text/javascript mappas innehållstypen till JSON och alla andra mappningar förblir oförändrade.

Om du vill använda JsonContentTypeMapper klassen använder du följande i 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>

Om du vill verifiera kravet på att använda JsonContentTypeMapper tar du bort attributet contentTypeMapper från konfigurationsfilen ovan. Klientsidan kan inte läsas in när du försöker använda text/javascript för att skicka JSON-innehåll.

Så här konfigurerar du, skapar och kör exemplet

  1. Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.

  2. Skapa lösningen WebContentTypeMapperSample.sln enligt beskrivningen i Skapa Windows Communication Foundation-exempel.

  3. Gå till http://localhost/ServiceModelSamples/JCTMClientPage.htm (öppna inte JCTMClientPage.htm i webbläsaren från projektkatalogen).