2015-06-01 117 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可解決此問題。

相關問題