加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

.net – ApiController与ODataController在露出DTO时

发布时间:2020-12-16 00:32:08 所属栏目:asp.Net 来源:网络整理
导读:当我应该继承我的控制器表单ODataController和ApiController时,有人可以解释我吗? 这个问题是由ApiController返回的结果可以用OData查询过滤的。 如果我将QueraybleAttribute应用于contoller的方法,即使操作返回IEnumerable,查询也被处理。 但是没有这个
当我应该继承我的控制器表单ODataController和ApiController时,有人可以解释我吗?

这个问题是由ApiController返回的结果可以用OData查询过滤的。

如果我将QueraybleAttribute应用于contoller的方法,即使操作返回IEnumerable,查询也被处理。
但是没有这个属性,但是调用config.EnableQuerySupport(),只有当方法返回IQueryable时才会处理查询。
我认为这是不一致的行为。 WebAPI documentation and examples意味着控制器必须从ODataController中输出。我有点困惑。
ApiController意外和部分支持部分(至少$ skip,$ filter和$ top)的OData协议。或者这是设计,我需要ODataController来完成ODataSupport。

真正的问题是我的服务暴露了DTO,而不是POCO。可能没有一对一的映射。需要将OData查询重新转换为与POCO的EF查询相对应的DTO。
现在只是和OData玩。我检索实体并将其转换为DTO。诚然,从DB中获取所有这些都不是很好,因为每个请求都是容忍实验的。但是如果需要DTO的一些过滤子集,那么绝对不需要将所有实体返回给客户端。
OData查询开始使用ApiController和Querayble属性开箱即用,但上述不一致会使我做错事情。

解决方法

Can someone explain me when I should inherit my controller form
ODataController vs ApiController?

如果要公开一个遵守OData protocol的端点,则需要从ODataController继承。如果要执行其他操作,例如REST端点,则继承自ApiController。

应用WebAPI OData框架的一些部分,但不是其他部分可能不是一个好主意。在某些情况下,可能在其他情况下可能无法正常工作。例如,您可能会获得查询支持,但可能不会生成$ metadata端点(这只是推测,实际的症状可能不同)。

听起来你已经使用了EntityFramework。我知道有许多示例显示如何将其作为OData端点。

如果由于某种原因不想这样做,您可以实现自己的查询。这在this tutorial的几个地方简要介绍,但是要点是添加一个类型为ODataQueryOptions< T>对您的操作,并使用其上的方法过滤您的结果集。但是,为所有可能的OData查询生成好的数据库查询可能会很痛苦,所以如果可能的话应该避免这种情况。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读