[英]OData query that uses .IncludeTotalCount() on a filtered (where clause) query
[英]Changing location of $top clause in OData query changes results when Querying MSAX7
我有一個 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%27 specific_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%27 specific_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"
}
]
}
據我了解OData 規范,這是不正確的行為。 我基於11.2 請求數據,它指出$top
查詢選項應該在$filter
查詢選項的最后和之后進行評估。 此外, OData ABNF 構造規則的第 2 節查詢選項似乎表明查詢選項可能以任何順序出現在 URL 中。
這表明此特定行為可能未正確實施。 您可能無法解決這個問題,因為它實現了一個自定義服務,該服務包裝現有服務以根據需要重新排序查詢選項。 我還假設這會影響所有 Odata 服務的行為。
我建議你向 Microsoft 創建一個支持請求,以便他們解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.