在Web API 2.2上使用带有Odata v4.0的$ select和$ expand时出错

Bre*_*ans 5 odata asp.net-web-api2 odata-v4

我有一个为OData v4配置的web api 2.2.我希望按ID返回用户,并且仅包含用户所属的用户组ID.当我这样做

http://localhost/User?$filter=id eq 312&$select=*,userGroups/id&$expand=userGroups
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

URI中指定的查询无效.在select子句中找到具有多个导航属性的路径.请重新设置您的查询,以便每个级别的select或expand仅包含TypeSegments或Properties.

在select子句中找到具有多个导航属性的路径.请重新设置您的查询,以便每个级别的select或expand仅包含TypeSegments或Properties.

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

Yi *_*SFT 5

你应该这样写你的查询:

http://localhost/User?$filter=id eq 312&$select=*&$expand=userGroups($select=id)
Run Code Online (Sandbox Code Playgroud)

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

  • @BrettFeagans 我来自 Microsoft 的 OData 团队,我与我们学院有很好的联系,从事 ODataLib 中的 URL 解析器工作。您能具体说明一下哪些方面没有得到足够完善的遵循吗?我们很乐意听到您的反馈并相应地改进我们的堆栈。 (2认同)
  • @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认同)