Изменение местоположения предложения $ top в запросе OData изменяет результаты при запросе MSAX7 - PullRequest
1 голос
/ 04 марта 2020

У меня есть запрос ODATA, который извлекает первую запись из таблицы Dynamics AX и игнорирует предложение $ filter, когда параметр $ top является первым параметром. Однако он извлекает правильную запись для условия $ filter, когда параметр $ top находится в конце запроса.

Вопрос: Как заставить сервер OData выполнять полный запрос независимо от того, где размещен параметр $ top?

следующие два случая возвращают идентичные результаты:

Случай 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"
    }
  ]
}

1 Ответ

1 голос
/ 05 марта 2020

Насколько я понимаю спецификацию OData , это некорректное поведение. Я основываю это на 11.2 Запрос данных , в котором говорится, что параметр запроса $top должен оцениваться последним и после параметра запроса $filter. Также раздел 2. Параметры запроса правил построения OData ABNF , по-видимому, указывают на то, что параметры запроса могут отображаться в любом порядке в URL.

Это указывает на то, что это конкретное поведение могло быть некорректным реализованы. Вероятно, вы не сможете решить эту проблему, если внедрить настраиваемую службу, которая упаковывает существующую службу, для изменения порядка запросов по мере необходимости. Я также предположил бы, что это влияет на поведение всех служб Odata.

Я предлагаю вам создать запрос в службу поддержки Microsoft, чтобы они могли решить эту проблему.

...