我正在开发一个实现ASP.NET Web API OData控制器的项目。 我试图在实体上创建一个自定义的可查询的GET操作,但是经过大量的搜索之后,我还没有找到这样做的简单方法。ODataController中的IQueryable GET操作/自定义导航属性
我有一个具有Snapshot属性的库存模型,并具有一个Entries集合(inventory.Snapshot.Entries)。 逻辑关系是:库存使用快照,快照包含条目。根据库存的其他属性,只有部分快照条目与库存相关。 最重要的是,清单可能没有定义特定的快照,在这种情况下,其快照属性为空,并且必须寻找合适的快照。
这么说,我想下面的网址是有效的,尽管库存不具有项属性:
/odata/Inventories(1)/Entries
而且InventoriesController下:
public async Task<IQueryable<Entry>> GetEntries([FromODataUri] int key)
{
var inventory = await db.Inventories.FindAsync(key);
if (inventory.SnapshotId != null)
{
return QueryRelatedEntriesInSnapshot(inventory, inventory.SnapshotId);
}
else
{
return QueryRelatedEntriesInSnapshot(inventory, await GetBestSnapshot(inventory, db.Snapshots));
}
}
这是否需要自定义路由约定还是可以在ODataConventionModelBuilder中注册伪造的导航属性,以便它生成路由?或者其他解决方案?
感谢您的任何帮助
我固定在网址中输入错字。 它看起来像我真正想要的是在OData 4.0 Web API 2.2中使用的OData函数。 与此同时,似乎最简单的解决方案是将集合添加到模型中,即使它们仅用于生成控制器方法的路由。 谢谢! – Antoine