在odata v4中返回包含多个实体类型的列表(类似于$ all)

时间:2018-10-11 06:08:49

标签: c# asp.net-web-api2 odata

我发现自己需要使用odata v4(Web Api 2实现)创建一个动作,该动作可以返回包含多个不同实体类型的列表,也可以返回一个包含多个实体类型的对象的动作。

但是,如果我创建一个返回列表的操作,则会收到一条错误消息,指示该列表中的所有项目必须为同一类型(或派生自同一类型)。现在,我假设该方法派生自在实体数据模型中注册的通用类型,因为它们均从对象继承。

如果我创建一个类型来嵌套要返回的各种实体类型,则返回的对象没有数据(我猜是因为内容是实体类型,它试图提供帮助并将其保留为导航属性之类的东西,但那不是我所需要的。)

当我在四处寻找试图在模型中注册动作的过程时,我遇到了$ all端点(在Web api 2实现中似乎不起作用,但是我的自定义内容可能会破坏它,因为好)http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc453752355 但是我不知道如何从一个动作中做类似的事情。

我希望它像

一样容易
actionConfig.ReturnsCollectionOfTypelessGoo() 

但如果有必要,我愿意跳篮球:)

2 个答案:

答案 0 :(得分:0)

第一个想法是List<object>,或者更好的new { data = new List<object>() },因为返回数组会引起问题。


更新: 如果所有方法都失败,您还可以将json作为字符串返回。

答案 1 :(得分:0)

考虑使用无类型的模型。 示例项目here