【问题标题】:Changing location of $top clause in OData query changes results when Querying MSAX7在查询 MSAX7 时更改 OData 查询中 $top 子句的位置会更改结果
【发布时间】:2020-06-17 07:50:29
【问题描述】:

我有一个 ODATA 查询,它从 Dynamics AX 表中提取第一条记录,并在 $top 参数是第一个参数时忽略 $filter 子句。但是,当 $top 参数位于查询末尾时,它会为 $filter 子句提取正确的记录。

问题:无论 $top 参数放在哪里,如何让 OData 服务器支持完整查询?

以下两种情况返回相同的结果:

案例 1:https://url/data/Users?$top=1

{
     "@odata.context":"https://url/data/$metadata#Users","value":[
     {
        "@odata.etag":"W/\"J5zEx4NDg33OD2YyM4TEs5NTY6zNz7E0ND7U3Nic=\"",
        "Id":"first_user_in_the_table",
        "Alias":"first_user_in_the_table@domain.com",
        "Name":"first_user_in_the_table"
     }
   ]
 }

案例 2:https://url/data/Users?$top=1&$filter=Alias%20eq%20%27specific_user@domain.com%27

{
    "@odata.context":"https://url/data/$metadata#Users","value":[
    {
        "@odata.etag":"W/\"J5zEx4NDg33OD2YyM4TEs5NTY6zNz7E0ND7U3Nic=\"",
        "Id":"first_user_in_the_table",
        "Alias":"first_user_in_the_table@domain.com",
        "Name":"first_user_in_the_table"
    }
  ]
}

但是,当我将 $top 参数移动到查询字符串的末尾时,我得到了正确的结果。

案例 3:https://url/data/Users?$filter=Alias%20eq%20%27specific_user@domain.com%27&$top=1

{
    "@odata.context":"https://url/data/$metadata#Users","value":[
    {
        "@odata.etag":"W/\"Jz3kz4Nj5g2N6zcz7MCw81Nj9M3M2TU3w4NT4c54Jw==\"",
        "Id":"specific_user",
        "Alias":"specific_user@domain.com",
        "Name":"The Specific User I Actually Want"
    }
  ]
}

【问题讨论】:

  • 有什么问题?
  • 无论 $top 参数放在哪里,如何让 OData 服务器支持完整查询?

标签: odata dynamics-ax-2012 dynamics-ax7


【解决方案1】:

据我了解OData specification,这是不正确的行为。我将此基于11.2 Requesting Data,它指出$top 查询选项应在最后和$filter 查询选项之后进行评估。还有第 2 节。OData ABNF construction rules 的查询选项似乎表明查询选项可以以任何顺序出现在 URL 中。

这表明此特定行为可能未正确实现。如果不实施自定义服务,包装现有服务以根据需要重新排序查询选项,您可能无法解决这个问题。我还假设这会影响所有 Odata 服务的行为。

我建议您向 Microsoft 创建一个支持请求,以便他们解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2020-06-24
    • 2021-10-28
    • 1970-01-01
    • 2014-12-26
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多