有人可以解释我什么时候应该继承我的控制器表单ODataController
vsApiController
吗?
问题是由于ApiController
可以使用 OData 查询过滤返回的结果。
如果我适用QueraybleAttribute
于控制器的方法,即使操作返回,也会处理查询IEnumerable
。
但是,如果没有此属性但使用调用config.EnableQuerySupport()
,则仅在方法返回时才处理查询IQueryable
。
我认为这不是一致的行为。WebAPI文档和示例暗示控制器必须从 ODataController 中初始化。我有点困惑。
要么ApiController
accidentally
和部分支持 OData 协议的一部分(至少 $skip、$filter 和 $top)。或者这是设计使然,我需要 ODataController 来获得完整的 ODataSupport。
真正的问题是我的服务暴露了 DTO,而不是 POCO。可能没有一对一的映射。需要将针对 DTO 的 OData 查询转换为针对 POCO 的 EF 查询。
现在只是玩 OData。我检索实体并将它们转换为 DTO。诚然,对于每个请求从数据库中获取所有这些请求的性能并不是很好,但对于实验却是可以容忍的。但是,如果它需要一些过滤的 DTO 子集,则绝对不需要将所有实体返回给客户端。
OData 查询开始使用 ApiController 和 Querayble 属性开箱即用,但前面提到的不一致让我觉得我做错了。