Asp.Net MVC4 Web API - 從沒有自定義 MediaTypeFormatter 的查詢中返回 OData 格式的 Json
我正在嘗試使用新的WebAPI beta 建構一個 Web 服務,我可以使用OData 查詢字元串約定進行查詢,並讓它返回OData 格式的 Json。我還想使用 OData 2.0(而不是 1.0)。
雖然它看起來不支持$select選項並且標頭似乎能夠覆蓋$format選項,但返回
IQueryable泛型似乎為我需要的大多數其他查詢選項提供支持。我真正苦苦掙扎的是如何最好地提供符合 OData 2.0 規範的 Json 對象。WebAPI 在查詢時只返回正常的 Json 數據。例如,如果我執行類似這樣的 GET 請求……
http://localhost:XXXXX/vendor/?$filter=RONUMBER eq '2597385'&$select=VENDORID,VENDORNAME&$top=1&$format=Json..為了在我的開發機器上獲得與指定 RONumber 匹配的最高命中,我收到包含以下 Json 的響應…
[{"MEPartNumber":"11-2222-3-4444","MFGPartNumber":"123456-123","MFGSerialNumber":"ABC123","RONumber":"987654321","VendorId":"1234567","VendorName":"ACME SERVICE CENTER"}]我需要符合 OData 2.0 規範的 Json。更像這樣的東西。。
OData V2: { "d" : { "results": { "__metadata": { "uri": "http://someserver/foo/vendor(1)", "type": "Vendor" }, "MEPartNumber": "11-2222-3-4444", "MFGPartNumber": "123456-123", "MFGSerialNumber": "ABC123", "RONumber":"987654321", "VendorId":"1234567", "VendorName": "ACME SERVICE CENTER" } } }我想我可以編寫一個自定義
MediaTypeFormatter來獲得我想要的結構。我也許還可以修改返回的對像以模仿所需 Json 的結構。除了這兩個選項之外,有沒有人知道讓 WebAPI 給我 OData 2.0 格式的 Json 對象的聰明方法?
您需要自己編寫
MediaTypeFormatter以提供正確的序列化。我們沒有在 MVC 4 Beta 中發布 OData 格式化程序,但是 WCF Web Api 的前一個化身有一些如何編寫的範例。http://wcf.codeplex.com/SourceControl/list/changesets查找 Microsoft.Net.Http.Formatting.OData(您應該能夠使用大部分原始碼,儘管一些實現細節可能已經改變)另一種方法是嘗試建構一個 DTO,該 DTO 將序列化為 OData v2 預期的形狀。