我正在尝试自定义标准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格式化程序已在某些时候重新添加。然后使用相关的标准格式化程序优先于包装版本。
是否有人知道何时重新添加以及是否/如何预防?
答案 0 :(得分:0)
当我意识到格式化程序没有重新添加到GlobalConfiguration.Configuration.Formatters时,我想出了这一点,但只有ControllerContext.Configuration.Formatters。
ODataController使用ODataFormattingAttribute注释。这将检查控制器的配置是否包含任何ODataMediaTypeFormatters,如果没有,则重新添加它们。
当它执行此检查时,它还会使用Decorator.GetInner查找包装的格式化程序,因此使用包装器实现IDecorator可以解决问题。