我目前正在 ASP.NET MVC 4 Web API 中试验 OData 端点。我喜欢这个概念,并尝试想出有效的方法在我们的项目中使用它。我有一个问题如下:我们有一个服务能够返回一个 IQueryable 并将实体的名称作为输入:
public IQueryable GetAll(string entityName);
在标准 Web API(相对于 OData 控制器)中,我可以创建一个通用控制器,它可以以 /api/entities/{entityName} 的形式调用并返回 IQueryable。对于 OData 控制器,我执行以下特定于实体的步骤:
- 在模型中注册实体。
- 为从 EntitySetController<> 派生的每个实体创建一个单独的控制器。
我想使用通用服务并尽可能多地避免特定于实体的实现。如果服务可以返回实体列表和相应类型,那么第一步可以很容易地自动化。这留下了第 2 步,因为到目前为止我需要为每个实体创建一个特定的控制器。我也想避免这种情况并创建一个使用通用服务的通用控制器。
谁能推荐一个解决方案,也许是通过影响 OData 路由?