Pav*_*nin 22 .net dto odata asp.net-web-api asp.net-apicontroller
当我继承我的控制器形式ODataController
vs 时,有人能解释我ApiController
吗?
问题是由返回的结果ApiController
可以使用OData查询过滤的事实引起的.
如果我应用于QueraybleAttribute
控制器的方法,即使操作返回,也会处理查询IEnumerable
.
但是如果没有此属性但是通过调用config.EnableQuerySupport()
,仅在方法返回时才处理查询IQueryable
.
我认为这不是一致的行为.WebAPI 文档和示例意味着控制器必须从ODataController中删除.我有点困惑.
任一ApiController
accidentally
和部分地支撑部分(至少$跳过,$滤波器和$顶部)的OData协议.或者这是设计的,我需要ODataController来完成ODataSupport.
真正的问题是我的服务暴露了DTO,而不是POCO.可能没有一对一的映射.需要将OData查询再次转换为DTO到针对POCO的EF查询.
现在只玩OData.我检索实体并将它们转换为DTO.不可否认,对于每个请求来说,从数据库中获取所有这些数据并不是非常有效,但仍然可以容忍实验.但是,如果它需要一些过滤的DTO子集,则定义上不需要将所有实体返回给客户端.
OData查询开始使用ApiController和Querayble属性开箱即用,但前面提到的不一致使我做错了.
Bri*_*chl 12
有人可以解释我什么时候我应该继承我的控制器形式ODataController vs ApiController?
ODataController
如果要公开符合OData协议的端点,您可能希望继承.如果您想要执行其他操作(例如REST端点),则继承ApiController
.
应用WebAPI OData框架的某些部分但不应用其他部分可能不是一个好主意.在某些情况下,它可能在其他情况下效果不佳.例如,您可能会获得查询支持,但可能无法生成$ metadata端点(这只是推测,实际症状可能不同).
听起来你已经在使用EntityFramework了.我知道有很多样本显示如何将其公开为OData端点.
如果由于某种原因不想这样做,可以自己实现查询.本教程的一些地方简要介绍了这一点,但要点是在操作中添加类型参数ODataQueryOptions<T>
,并使用其中的方法过滤结果集.但是,为所有可能的OData查询生成良好的数据库查询可能会很痛苦,因此如果可能,应该避免这种情况.
归档时间: |
|
查看次数: |
13703 次 |
最近记录: |