动态web api odata元数据附加属性

时间:2014-11-04 04:51:19

标签: dynamic asp.net-web-api annotations odata data-annotations

在使用api odata的网络v4 protocol中,如何添加其他属性?

完全动态,没有实体框架,没有反思提供者,
   调用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响应)中。)

1 个答案:

答案 0 :(得分:1)

在OData v4中,至少有两个选项可以实现该行为:开放类型,实例注释。这取决于您的要求或设计决策。

除了在类型定义中声明的任何属性外,open类型还作为包含动态属性的结构化类型添加。开放类型可让您为数据模型增加灵活性。

本教程:

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; }

并在get action方法中生成实体,如您所愿。 另一个选项可用于控制条目序列化,请点击此处

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