2014-02-15 27 views
1

我有一個輕量級設置,我在OData中使用Web API 2,但不創建「/ odata」端點及其伴隨的「/ odata/$ metadata」,而只是使用標準ApiController與屬性路由和Get方法標記爲覆蓋[Queryable]:[InlineCountQueryable]這裏詳述Web API, OData, $inlinecount and testing可查詢的Web API 2 OData序列化

這一切都工作得很好,除了我只能公開沒有任何集合或對象屬性的專用模型類,因爲JSON序列化器會序列化整個對象圖。我的理想行爲是隻讓所有集合完全忽略,而對象屬性只包含在$ expand中。

我相信這可以工作,因爲一個OData Web Api 2腳手架VS 2013創建的實體框架上下文具有類似的行爲,但我想保持這樣儘可能瘦,並避免去那條路線,因爲我發現它有點脆弱,這個服務不需要公開元數據描述。

更新

我做了ASPNET樣品中一些挖掘,發現「CustomODataFormatter」樣品,這似乎暴露我會需要修改..但是ODataSerializerProvider/ODataSerializer設置概述有不工作的機械與所有屬性路由(用[Route(「Some/Url」)])定義的任何方法)。

鑑於這似乎是我需要的,有沒有人知道屬性路由和odata序列化器提供程序機制應該一起工作?

+0

你的問題是什麼? –

+0

對不起,我添加了一個包含明確問題的更新。 – SourceSimian

+0

謝謝,但很抱歉,我不知道答案。 –

回答

0

[JsonIgnore] or [DataMember]可用於忽略json.net序列化程序的屬性。 webapi.odata 5.2支持ODataRouteAttribute,一個例子是here

+0

我會在自己的研究中詳細闡述一下這個答案:ODataSerializer提供程序只能用於重量級的OData設置點:Web API必須提前知道所有的對象關係;所以普通的[Route(「url」)]屬性將不能使用它。 ODataRoute可以工作,但僅僅通過查看示例,它似乎也需要完整的OData端點。爲了獲得我想要的行爲,我不得不以某種方式將其綁定到Web API序列化框架:不值得麻煩,我會堅持使用專用模型。 – SourceSimian

+0

斷開的鏈接,這裏是更新的鏈接: http://aspnetwebstack.codeplex.com/SourceControl/latest#OData/test/System.Web.OData.Test/OData/Routing/AttributeRoutingTest.cs –