Ограничения длины URL OData - PullRequest
       2

Ограничения длины URL OData

12 голосов
/ 22 ноября 2010

Браузеры имеют ограничение на длину URL-адресов. IE имеет ограничение, что длина URL не должна превышать 2K символов.

Когда я формирую запрос $ filter equals, я могу сравнить с несколькими входными значениями. В таком случае длина URL будет превышать 2K.

Устанавливает ли OData какие-либо ограничения на длину URL-адреса?

Спасибо

Ответы [ 3 ]

9 голосов
/ 22 ноября 2010

OData сама по себе не ограничивает длину URL, но, как вы заметили, большинство клиентов и серверов делают. Поэтому обычно полезно не создавать URL-адреса слишком долго.

Проблема, на которую вы ссылаетесь (реализация оператора Contains или чего-то подобного), имеет два возможных обходных пути:

1) Используйте сервисную операцию для обработки такого запроса для вас. Вы можете передать несколько входных значений, закодированных в виде строки или чего-то в этом роде, или, возможно, сервисная операция в любом случае знает об этом заранее.

2) Используйте длинный фильтр $, но отправьте запрос в запросе $ batch. Преимущество в том, что лимит на URL намного больше, и очень маловероятно, что вы его достигнете. Недостатком является то, что даже если вы пытаетесь выполнить GET-запрос, из-за $ batch он отправляется как POST-запрос по сети и, следовательно, он не будет кэшироваться.

2 голосов
/ 19 августа 2016

Я полагаюсь на @ ответ Витека на вопрос ОП:

Сама OData не ограничивает длину URL

Ноесли другие, которые приезжают сюда из-за ограничений IIS : The request filtering module is configured to deny a request where the query string is too long., могут получить пользу от моего ответа.Следуйте инструкциям этой ошибки:

Verify the configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting in the applicationhost.config or web.config file.

Следуйте инструкциям:

<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxQueryString="50000">
        </requestLimits>
        ...

Вы также можете получить эту ошибку: The length of the query string for this request exceeds the configured maxQueryStringLength value.

ЭтоТехника описана здесь и здесь , и выглядит это так:

<configuration>
    <system.web>
        <httpRuntime maxQueryStringLength = "50000" ... />
0 голосов
/ 20 сентября 2012

Я не нашел, как используется $batch.поэтому я использовал $filter для отправки длинного запроса.Это довольно просто:

DataServiceQuery<CLIENT> ordersQuery = DataServiceQuery<CLIENT>)this.context.CLIENTS.AddQueryOption("$filter", MyFilter());

, где MyFilter() возвращает строку, подобную этой: "ID_CLIENT = 1 or ID_CLIENT = 2"

Примечание: не используйте заглавные буквы AND.это приводит и к ошибке.используйте and не AND

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...