我正在開發一個實現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