【问题标题】:Passing parameters to an OData (GET) method which returns a collection将参数传递给返回集合的 OData (GET) 方法
【发布时间】:2015-10-27 15:40:58
【问题描述】:

我正在使用 OData v3。如何将参数传递给 OData 控制器并返回集合?我正在尝试做的示例:

[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable<ServiceInfoResult> Get([FromODataUri] int instanceId)
{
    //etc
}

当我测试这个时,我得到了这个错误:

No HTTP resource was found that matches the request URI 'http://localhost:30863/odata/ServiceInfoResultApi(1)'.
No action was found on the controller 'ServiceInfoResultApi' that matches the request.

我知道 OData 操作,但在这种情况下它们不是一个可行的选择,因为我需要在响应中返回 odata.count,但无论我做什么,我都做不到使用 OData 操作 时返回该属性(即使尝试此处建议的内容:Web API OData Inlinecount not working 和此处:Webapi odata expand with entity framework functions)。所以看来我唯一的选择是为ServiceInfoResult 实体创建一个新的 OData API 控制器,这样我就可以避免 OData 操作。但是,正如您在上面看到的,将参数传递给返回集合的方法似乎会导致其他错误。

有什么解决办法吗?不,我无法更新到 OData v4,因为这会带来很多其他问题(这会比我花费更多的时间,而且它不支持 DateTime)

更新

感谢@Fan Ouyang,我发现JSON 有效负载中缺少odata.count 的原因是我没有返回实体类型。如果ServiceInfoResult 是我数据库中的一个实体,则将返回odata.count。有点傻,因为它没有被退回,但事实就是这样。我想知道是否有任何解决方法。例如,我可以下载源代码,更改 1 行代码并使用它吗?否则,也许是我开始研究 OData v4 的时候了。我的项目很大,所以在我的时间很短的情况下,这不是一个好主意。所以,如果有任何替代方案,我想听听。谢谢!

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api odata


    【解决方案1】:

    试试这个示例,CheckoutMany 方法接受参数并返回一个集合https://github.com/OData/ODataSamples/tree/master/WebApi/v3/ODataActionsSample

    在CheckOutMany action方法中添加[EnableQuery]属性,并在requset url中添加$inlinecount queryoption,可以在payload中看到odata.count

    顺便说一句,V4 现在支持日期时间:http://odata.github.io/WebApi/#04-01-datetime-support

    【讨论】:

    • 感谢您的评论。正如我已经说过的;我知道 OData 操作,但我不能在我的情况下使用它们,因为它们不会在响应中返回 odata.count。但是,您对 V4 支持或 DateTime 的链接很有趣。谢谢你。我将来可能会考虑升级,但现在我仍然需要 V3 的解决方案
    • 抱歉我的回答不清楚,并且 [EnableQuery] 属性在起作用,并添加 $inlinecount=allpages 查询选项,odata.count 在有效负载中返回。
    • 再次感谢您,但我知道[EnableQuery]$inlinecount=allpages。它不适用于 OData 操作。它似乎只适用于普通的 HTTP GET 方法,而不适用于 OData 操作。当我尝试使用 OData 操作时,有效负载仅返回 odata.metadatavalue,但不返回 odata.count。不过还是感谢您的帮助。
    • 不,我很确定它可以工作...我已经下载并修改了示例,有效负载类似于“odata.metadata”:“...”,“odata.count”: "2","值":[...
    • 好的,谢谢。我会按照您的建议查看示例项目。
    【解决方案2】:

    最近在 5.7 版中修复了这个问题(现在为复杂类型的集合返回@odata.count)。更多信息在这里: https://github.com/OData/WebApi/issues/484#issuecomment-153929767

    【讨论】:

      猜你喜欢
      • 2018-07-14
      • 1970-01-01
      • 2015-02-02
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多