Megosztás:


WebContentTypeMapper minta

A WebContentTypeMapper minta bemutatja, hogyan képezhet le új tartalomtípusokat a Windows Communication Foundation (WCF) üzenettörzs-formátumaihoz.

A WebHttpEndpoint elem csatlakozik a webes üzenetkódolóhoz, amely lehetővé teszi, hogy a WCF ugyanazon a kapcsolaton keresztül JSON-, XML- vagy nyers bináris üzeneteket fogadjon. A kódoló a kérelem HTTP-tartalomtípusával határozza meg az üzenet törzsformátumát. Ez a minta bemutatja az WebContentTypeMapper osztályt, amely lehetővé teszi a felhasználó számára a tartalomtípus és a törzsformátum közötti leképezés szabályozását.

A WCF a tartalomtípusok alapértelmezett leképezéseit biztosítja. Leképezi például a JSON-t, application/json és text/xml XML-nek megfelelteti. Minden olyan tartalomtípus, amely nem JSON-ra vagy XML-re van leképezve, nyers bináris formátumra van leképezve.

Bizonyos esetekben (például leküldéses stílusú API-k) a szolgáltatásfejlesztő nem szabályozza az ügyfél által visszaadott tartalomtípust. Előfordulhat például, hogy az ügyfelek JSON-t text/javascript adnak vissza ahelyett, hogy application/json. Ebben az esetben a szolgáltatásfejlesztőnek olyan típust kell megadnia, amely a WebContentTypeMapper megadott tartalomtípus helyes kezeléséhez származik, ahogyan az alábbi mintakódban látható.

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

A típusnak a GetMessageFormatForContentType(String) metódust kell felülbírálnia. A metódusnak ki kell értékelnie az contentType argumentumot, és a következő értékek egyikét kell visszaadnia: Json, Xml, Rawvagy Default. A Default visszatérés halasztása a webes üzenetkódoló alapértelmezett leképezéseit követi. Az előző mintakódban a text/javascript tartalomtípus JSON-ra van leképezve, és az összes többi leképezés változatlan marad.

Az JsonContentTypeMapper osztály használatához a következő lépéseket hajtsa végre Web.config-ban:

<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>

A JsonContentTypeMapper használatának ellenőrzéséhez távolítsa el a contentTypeMapper attribútumot a fenti konfigurációs fájlból. Az ügyféloldal nem töltődik be, amikor megpróbálja a text/javascript használatával JSON-tartalmat küldeni.

A példa beállítása, elkészítése és futtatása

  1. Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time beállítási eljárását.

  2. A WebContentTypeMapperSample.sln megoldást a Windows Communication Foundation minták építésében leírtak szerint készítse el.

  3. Lépjen be a http://localhost/ServiceModelSamples/JCTMClientPage.htm útvonalra (ne nyissa meg JCTMClientPage.htm fájlt a böngészőben a projektkönyvtárból).