【发布时间】:2014-03-27 11:03:23
【问题描述】:
我正在开发一个实现 ASP.NET Web API OData 控制器的项目。 我正在尝试在实体上创建自定义可查询 GET 操作,但是经过广泛搜索后,我还没有找到一种直接的方法。
我有一个具有 Snapshot 属性的 Inventory 模型,而后者又具有一个 Entries 集合 (inventory.Snapshot.Entries)。 逻辑关系是:库存使用快照,快照包含条目。根据清单的其他属性,只有快照的一些条目与清单相关。 最重要的是,库存可能没有定义特定的快照,在这种情况下,它的 Snapshot 属性为 null,必须寻找合适的快照。
也就是说,我希望以下 URL 有效,即使 Inventory 没有 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 中注册虚假导航属性以便生成路由?还是有其他解决方案?
感谢您的帮助
【问题讨论】:
标签: .net odata asp.net-web-api-routing asp.net-web-api2