Образец WebContentTypeMapper
В этом образце показано, как сопоставить новые типы содержимого с форматами текста сообщения Windows Communication Foundation (WCF).
Элемент WebHttpEndpoint подключает кодировщик веб-сообщений, который позволяет WCF получать сообщения JSON, XML или необработанные двоичные сообщения в одной и той же конечной точке. Кодировщик определяет формат тела сообщения, просмотрев тип содержимого HTTP запроса. В этом образце показан класс WebContentTypeMapper, который позволяет пользователю управлять сопоставлением типа содержимого и формата тела.
WCF предоставляет набор сопоставлений по умолчанию для типов содержимого. Например, application/json сопоставляется с JSON, а text/xml сопоставляет с XML. Любой тип содержимого, который не сопоставляется с JSON или XML, сопоставляется с необработанным двоичным форматом.
В некоторых сценариях (например, интерфейсы API внедрения) разработчик службы не управляет типом содержимого, возвращаемым клиентом. Например, клиенты могут возвращать JSON как text/javascript, а не application/json. В этом случае разработчик службы должен предоставить тип, унаследованный от WebContentTypeMapper, для правильной обработки данного типа содержимого, как показано в следующем образце кода.
public class JsonContentTypeMapper : WebContentTypeMapper
{
public override WebContentFormat
GetMessageFormatForContentType(string contentType)
{
if (contentType == "text/javascript")
{
return WebContentFormat.Json;
}
else
{
return WebContentFormat.Default;
}
}
}
Тип должен переопределить метод GetMessageFormatForContentType. Метод должен оценить аргумент contentType и возвратить одно из следующих значений: Json, Xml, Raw или Default. Возврат Default следует сопоставлениям кодировщика веб-сообщений по умолчанию. В предыдущем образце кода тип содержимого text/javascript сопоставляется с JSON, а все другие сопоставления остаются неизменными.
Для использования класса JsonContentTypeMapper
воспользуйтесь следующими элементами 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>
Чтобы проверить требование к использованию JsonContentTypeMapper, удалите атрибут contentTypeMapper из указанного выше файла конфигурации. Не удается загрузить страницу клиента при попытке использования text/javascript для отправки содержимого JSON.
Настройка, построение и выполнение образца
Убедитесь, что выполнены процедуры, описанные в разделе Процедура однократной настройки образцов Windows Communication Foundation.
Выполните построение решения WebContentTypeMapperSample.sln, описанное в разделе Построение образцов Windows Communication Foundation.
Перейдите к странице https://localhost/ServiceModelSamples/JCTMClientPage.htm (не открывайте страницу JCTMClientPage.htm в веб-обозревателе из каталога проекта).
Примечание |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\WF_WCF_Samples
Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.
<диск_установки>:\WF_WCF_Samples\WCF\Extensibility\Ajax\WebContentTypeMapper
|