【问题标题】:Error when using $select and $expand with Odata v4.0 on Web API 2.2在 Web API 2.2 上将 $select 和 $expand 与 Odata v4.0 一起使用时出错
【发布时间】:2015-01-24 09:00:41
【问题描述】:

我有一个为 OData v4 配置的 web api 2.2。我想按 ID 返回用户,并且只包含用户所属的用户组 ID。当我这样做时

http://localhost/User?$filter=id eq 312&$select=*,userGroups/id&$expand=userGroups

我收到此错误

URI 中指定的查询无效。找到了一条路径 选择子句中的多个导航属性。请改写你的 查询使得每个级别的 select 或 expand 仅包含 类型段或属性。

在选择子句中找到具有多个导航属性的路径。 请改写您的查询,以便每个级别仅选择或展开 包含 TypeSegments 或 Properties。

如果我删除“,userGruops/id”,查询将执行

【问题讨论】:

    标签: odata asp.net-web-api2 odata-v4


    【解决方案1】:

    你应该这样写你的查询:

    http://localhost/User?$filter=id eq 312&$select=*&$expand=userGroups($select=id)
    

    顺便说一句,您还可以删除 $select=* 段,因为默认情况下,所有非导航属性都包含在响应中。

    【讨论】:

    • 这非常有效。我不认为微软完全遵循 OData 规范。谢谢
    • @BrettFeagans 我来自 Microsoft 的 OData 团队,并且我与我们在 ODataLib 中的 URL 解析器工作的大学有很好的联系。你会阐明到底是什么没有被完全遵循吗?我们很乐意听取您的反馈并相应地改进我们的堆栈。
    • @Yi Ding - FSFT / @Microsoft OData 团队这个:https://graph.microsoft.com/v1.0/users?$select=*&$expand=manager($select=id) 给出错误:“无效的 $select 属性”而这个:https://graph.microsoft.com/v1.0/users?$expand=manager&$select=id,displayName,manager/id 给出错误:“解析 OData 选择和展开失败: 在 select 子句中找到具有多个导航属性的路径或错误的复杂属性路径。请改写您的查询,使每个级别的 select 或 expand 仅包含 TypeSegments 或 Properties。"
    【解决方案2】:

    API 句柄的 Beta 版

    https://graph.microsoft.com/beta/users?$select=id,surname&$expand=manager($select=id)
    

    【讨论】:

      猜你喜欢
      • 2015-01-03
      • 2015-05-20
      • 2015-05-29
      • 2013-11-20
      • 2015-04-04
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 2019-12-02
      相关资源
      最近更新 更多