2013-05-14 70 views
2

我試圖從控制器的Get方法返回一個對象,該方法與查詢運行的類不同。如何從OData中運行查詢的對象返回不同的對象?

基於答案here,這是我在做什麼:

public PageResult<OutputPoco> Get(ODataQueryOptions<InputPoco> odataQueryOptions) 

當試圖運行此我得到406 Not Acceptable。我錯過了什麼?這種方法有沒有一個工作的例子?我正在使用ODataControllerOutputPoco包含對InputPoco的引用。我需要排序和過濾工作(在InputPoco)。

回答

1

你在使用ODataController嗎?只有在構建OData服務時,您才必須使用ODataController。在這種情況下,您必須構建一個EDM模型,然後使用odata路線公開OData服務。

如果您只是想構建一個僅支持OData查詢語義的vanilla web API(而不是像url慣例和格式化那樣的OData的其餘部分),則應該使用ApiController。

+1

我正在使用ODataController。如果我使用modelBuilder.EntitySet 來映射路線,那麼我會得到一個406.如果我使用modelBuilder.Entity 來映射路線,那麼代碼會抱怨導航屬性(因爲OutputPoco包含對InputPoco的引用)。我嘗試的任何組合都有一些突破。這種方法是否有一個工作示例,使用排序,過濾等? – boris 2013-05-17 12:43:45

+0

我們有一堆樣本[在這裏](https://aspnet.codeplex.com/SourceControl/latest#Samples/ReadMe.txt)。這兩個可能最感興趣 - [ODataServiceSample](https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/ODataServiceSample/ReadMe.txt),[ODataQueryableSample](https://aspnet.codeplex.com/ SourceControl /最新#樣品/的WebAPI/ODataQueryableSample/ReadMe.txt中)。 – 2013-05-18 06:33:53

+0

看看樣品。我不認爲他們有我正在尋找的東西。基本上,我需要兩個類:A和B. B有一個A的集合。需要在A上查詢和排序,然後返回B,其中列表A完全展開。 – boris 2013-05-20 14:10:57