2014-11-04 33 views
2

在網頁api odata中使用v4 protocol,如何添加其他屬性?動態web api odata元數據附加屬性

完全動態,沒有實體框架,沒有反射提供者,
當調用url時動態生成元數據。

編輯
的Web API請求網址:
http://locahost/Service1/EntitySet1

實際JSON輸出:

{"@odata.context":"some url", value:[{"id":1}]} 

預計JSON響應:

{"@odata.context":"some url", value:[{"id":1}], "ExtraCustomAttribute": "custom value"} 

如何響應web api odata v4 json添加此自定義屬性?

在元數據調用(edmx響應)和實例有效負載調用(json響應)中)。

+0

是你的問題實在是不清楚 – gdoron 2014-11-04 06:48:19

回答

1

在OData v4中,至少有兩個選項可以實現該行爲:一個開放類型,實例註釋。這取決於您的要求或設計決定。

除了在類型定義中聲明的任何屬性外,開放類型還作爲包含動態屬性的結構類型添加。開放式類型使您可以爲數據模型增加靈活性。

本教程:

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/use-open-types-in-odata-v4

展示瞭如何在ASP.NET的Web API的OData使用開放類型。

實例註解說明如下: docs.oasis-open.org/odata/odata-json-format/v4.0/os/odata-json-format-v4.0-os.html#_Toc372793088

在你的情況下,試圖聲明您實體:

ODataModelBuilder builder = new ODataModelBuilder(); 

ComplexTypeConfiguration<YourEntity> pressType = builder.ComplexType<YourEntity>(); 
// ... 
pressType.HasDynamicProperties(c => c.ExtraCustomAttribute); 
// public IDictionary<string, object> ExtraCustomAttribute{ get; set; } 

,並取得動作的方法,你想生成實體。 另一種選擇是可以克服進入系列化控制,檢查這裏

https://aspnetwebstack.codeplex.com/wikipage?title=OData%20formatter%20extensibility