有没有办法阻止在配置中添加默认的ODataMediaTypeFormatters?

时间:2015-06-01 09:38:34

标签: asp.net-web-api-odata

我正在尝试自定义标准ODataMediaTypeFormatters的行为,并通过将它们包装在扩展MediaTypeFormatter的另一种类型中来实现。 e.g。

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格式化程序已在某些时候重新添加。然后使用相关的标准格式化程序优先于包装版本。

是否有人知道何时重新添加以及是否/如何预防?

1 个答案:

答案 0 :(得分:0)

当我意识到格式化程序没有重新添加到GlobalConfiguration.Configuration.Formatters时,我想出了这一点,但只有ControllerContext.Configuration.Formatters。

ODataController使用ODataFormattingAttribute注释。这将检查控制器的配置是否包含任何ODataMediaTypeFormatters,如果没有,则重新添加它们。

当它执行此检查时,它还会使用Decorator.GetInner查找包装的格式化程序,因此使用包装器实现IDecorator可以解决问题。