2015-06-01 2 views
0

Я пытаюсь настроить поведение стандартного ODataMediaTypeFormatters и сделал это, обернув их другим типом, который расширяет MediaTypeFormatter. напримерЕсть ли способ предотвратить добавление по умолчанию ODataMediaTypeFormatters к конфигурации?

var formatters = ODataMediaTypeFormatters 
        .Create(serialiserProvider, deserialiserProvider) 
        .Select(formatter => new Wrapper(formatter)); 

config.Formatters.InsertRange(0, formatters); 

После того, как метод конфигурации WebAPI имеет выполненные config.Formatters содержат 12 элементов (7 из которых являются завернутыми форматтерами).

Однако, когда ответ сериализуется config.Formatters содержит 17 элементов, поскольку стандартные форматы OData были добавлены в какой-то момент. Соответствующий стандартный форматтер затем используется в предпочтении к завернутой версии.

Кто-нибудь знает, когда это повторное добавление происходит, и если/как его можно предотвратить?

ответ

0

Я понял это, когда понял, что форматировщики не добавляются повторно в GlobalConfiguration.Configuration.Formatters, а только ControllerContext.Configuration.Formatters.

ODataController аннотируется с атрибутом ODataFormattingAttribute. Это проверяет, содержит ли конфигурация контроллера какие-либо ODataMediaTypeFormatters и, если нет, повторно добавляет их.

Когда он выполняет эту проверку, он также ищет завернутые формы, используя Decorator.GetInner, поэтому с использованием обертки IDecorator решена проблема.

Смежные вопросы