我正在研究在 WebApi 中使用 odata。到目前为止一切顺利,我喜欢它比 wcf 数据服务更灵活。
但是,当我尝试在模型中使用虚拟 IQueryable 属性时,我遇到了问题。
所以例如我有这些模型类:
public class MainItem
{
public int Id { get; set;}
public virtual IEnumerable<SubItem> SubItems { get; set;}
}
我的 MainItemsController 看起来像这样
public class MainItemsController : EntitySetController<MainItem, int>
{
[Queryable]
public override IQueryable<MainItem> Get()
{
return SomeMainItemIQueryable();
}
public override GetEntityByKey(int key)
{
return SingleMainItem(key);
}
[Queryable]
public IQueryable GetSubItems(int key)
{
return SomeSubItemIQueryable(SingleMainItem(key));
}
}
我在以下 url 上得到了正确的结果: /odata/MainItems /odata/MainItems(1) /odata/MainItems(1)/SubItems
但是当我尝试做 /odata/MainItems(1)/SubItems(1)
我收到此错误此服务不支持“~/entityset/key/navigation/key”形式的 OData 请求
我很想将此调用以及 /odata/MainItems(1)/SubItems 重定向到 SubItemsController。
我可能可以通过制作自定义 ODataPathHandler 来做到这一点,但这感觉不是正确的做法。