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

Nav*_*eth 5 annotations dynamic odata data-annotations asp.net-web-api

api odata使用 的网页中v4 protocol,如何添加附加属性?

完全动态,无实体框架,无反射提供者,
调用url时动态生成元数据。

编辑
Web Api 请求 url:
http://locahost/Service1/EntitySet1

实际的json输出:

{"@odata.context":"some url", value:[{"id":1}]}  
Run Code Online (Sandbox Code Playgroud)

预期的 json 响应:

{"@odata.context":"some url", value:[{"id":1}], "ExtraCustomAttribute": "custom value"}  
Run Code Online (Sandbox Code Playgroud)

如何在响应中添加此自定义属性web api odata v4 json

在元数据调用(edmx响应)和实例负载调用(json响应)中。

Ole*_*sev 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; }
Run Code Online (Sandbox Code Playgroud)

并在 get 操作方法中根据需要生成实体。另一个选项可用于控制条目序列化,请在此处查看

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