基本上我在后端使用Web API 2和Entity Framework编写API。
我不确定的是我的模型上的外键应该怎么做。
假设我使用订单属性的外键获得 person 属性。
有时客户需要人物财产,有时却不需要。我应该怎么做呢?
我应该创建2种方法: / api / person / 1< - 返回没有订单的人 / api / personwithorder / 1< - 返回订单人
在我看来,似乎有很多方法。
我知道可查询属性也存在,它支持客户端使用$ extend参数随意包含属性 - 但是如果可以避免,我宁愿不使用可查询属性。
你有什么建议?
答案 0 :(得分:2)
在我的头顶,这里有一些选择。
选项1
API中的多种方法
public Person GetPerson() { ... }
public Person GetPersonWithOrders() { ... }
选项2
将标志传递给方法:
public Person GetPerson(bool getOrders) { ... }
选项3
您可以使用OData
来允许调用者查询数据。
答案 1 :(得分:2)
要扩展DavidG使用OData的选项3,您可以按照以下方式进行操作:
Install-package Microsoft.AspNet.WebApi.OData
创建一个继承自PeopleController
ODataController
配置Web API OData模型如下:
modelBuilder.EntitySet<Person>("People");
将Get
方法定义为返回IQueryable<Person>
在您的调用代码中,将expand
子句添加到URL以指定您要公开的子对象,如下所示:/api/People(1)?$expand=Orders
关于注册OData路由还有一点点,但这是你可以在任何sample project中找到的所有标准配置。
OData非常灵活,可以处理大量有关如何构建网址的问题。