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
Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.
Skapa lösningen WebContentTypeMapperSample.sln enligt beskrivningen i Skapa Windows Communication Foundation-exempel.
Gå till
http://localhost/ServiceModelSamples/JCTMClientPage.htm
(öppna inte JCTMClientPage.htm i webbläsaren från projektkatalogen).