2013-03-27 22 views
4

我在嘗試將基於WebAPI的應用程序從WebAPI RC遷移到發行版。它需要一些查詢參數,並返回ATOM格式的OData。由於它是一個正在運行的服務,我需要維護當前的行爲。從WebAPI返回PageResult未格式化爲OData

我已經改變了API方法來返回一個PageResult<T>與我的數據。根據MSDN上的文章Supporting OData Query Options應該是我需要做的,但它不工作。我得到結果,但它總是格式化爲JSON。我嘗試將Accept請求標題更改爲application/atom+xml,但似乎沒有任何區別。

我也試過在我WebApiConfig沒有明顯效果加上下面幾行:

configuration.EnableQuerySupport(); 
configuration.Formatters.InsertRange(0, ODataMediaTypeFormatters.Create()); 

我試圖清理掉現有的格式化,只是爲了看看會發生什麼。我剛回來406 Not Acceptable錯誤。所以看起來OData格式化程序可能不報告他們可以處理請求/響應?

+0

您是否安裝了Web API OData組件?這些都可以通過NuGet。 – DaveB 2013-03-27 19:28:30

+0

是的,我昨天從NuGet中獲得了最新版本。 – 2013-03-27 19:34:12

+0

您是否已將'Queryable'([Queryable(AllowedQueryOptions = AllowedQueryOptions.All)] )屬性添加到您的控制器方法並將其返回類型設置爲'IQueryable '?也許你可以發佈你的控制器和global.asax代碼。 – DaveB 2013-03-27 19:47:02

回答

1

請通過這個博客帖子,瞭解啓用OData的:

http://blogs.msdn.com/b/webdev/archive/2013/01/29/getting-started-with-asp-net-webapi-odata-in-3-simple-steps.aspx

你錯過了一個OData的路線 - 用於格式化的上班路線是必需的。

+0

不幸的是'MapODataRoute()'不允許我定義任何默認值,遺留原因。由於傳統原因,我的控制器也不符合該模式。有什麼辦法可以在不重寫所有內容的情況下獲得OData格式化程序? – 2013-03-27 20:48:05

+0

那麼,這是解決方案,但它基本上需要重建整個應用程序。 – 2013-03-28 21:32:26

+0

這仍然是你接受的「接受」方式嗎?這是我找到的答案,但正如你所說......我們有理由使用地圖路線 – Mutmatt 2014-02-13 18:00:02