2017-07-18 58 views
0

從閱讀Open Types in OData v4 with ASP.NET Web API,我的理解是$元調用不會返回動態屬性作爲實體模式的一部分。

由於$ select不允許指定屬性的類型,這是否意味着開放實體的模式應該以某種方式存儲在服務中?爲什麼動態屬性不應該包含在$ metadata中呢?

回答

0

您是對的,動態屬性不會添加到元數據中,因爲它們通常用於涵蓋添加屬性的情況,這些屬性不存在所有對象或添加構建元數據時未知的屬性(否則,你可以使用一個普通的屬性)

你可以使用這個頭來獲得更多關於實際調用中的屬性類型的信息,但是它並不提供簡單類型的信息,比如字符串, ints等我發現這個信息很難使用(但它總比沒有好!)

Accept: application/json;odata.metadata=full 

例如,使用OData的踐踏,例如服務,調用此網址:http://services.odata.org/V4/TripPinServiceRW/People與頭會給你的有效載荷"[email protected]": "#Collection(Microsoft.OData.SampleService.Models.TripPin.Location)",然後你就可以用它來了解AddressInfo財產

+0

這樣做的自相矛盾的是,一個新的屬性你可以查詢和選擇(簡單的)動態屬性,這樣就告訴我他們必須以某種方式成爲模式的一部分。 –

+0

可以手動檢查你的OData模型對象,它可能值得進行調試和查看,以幫助說服你自己這些動態屬性不在那裏? – TomDoesCode

+0

我從服務的實施者的角度提出這個問題。一個想法是簡單地將所有內容存儲爲字符串,並在$ select中假定字符串類型。有鑑於此,在$ filter中使用cast()也是有道理的,但從實現的角度來看,這意味着存儲/查詢的效率非常低。 –