Pergunta

Os navegadores têm limitação no comprimento dos URLs. O IE tem limitação de que o comprimento da URL não deve exceder os caracteres 2K.

Quando formar um filtro $ é igual à consulta, eu poderia comparar com vários valores de entrada. Nesse caso, o comprimento do URL excederia 2k.

Odata define algum limite para o comprimento do URL?

Obrigado

Foi útil?

Solução

O próprio Odata não limita o comprimento do URL, mas como você observou a maioria dos clientes e servidores. Então, geralmente é uma boa prática não produzir URLs por muito tempo.

O problema que você se refere (implementando o operador contém ou algo semelhante) tem duas soluções alternativas possíveis:

1) Use a operação de serviço para lidar com essa consulta para você. Você pode passar os múltiplos valores de entrada codificados como uma string ou algo assim, ou talvez a operação de serviço os conheça de qualquer maneira.

2) Use o filtro $ longo, mas envie a solicitação em uma solicitação de lote $. A vantagem é que o limite do URL é muito maior e é muito improvável que você o atinja. A desvantagem é que, embora você esteja tentando executar uma solicitação GET, devido ao $ lote, ele viaja como solicitação de postagem pela Web e, portanto, não será armazenado em cache.

Outras dicas

Eu adiar para @Resposta de vitek para a pergunta do OP:

O próprio Odata não limita o comprimento do URL

Mas se outros que chegam aqui por causa de IIS Limitações : The request filtering module is configured to deny a request where the query string is too long., eles podem se beneficiar da minha resposta. Siga as instruções desse erro:

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

Siga as instruções:

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

Você também pode receber este erro:The length of the query string for this request exceeds the configured maxQueryStringLength value.

Esta técnica é descrita aqui e aqui, e parece assim:

<configuration>
    <system.web>
        <httpRuntime maxQueryStringLength = "50000" ... />

Eu não encontrei como o $batch é usado. Então eu usei $filter para enviar um longo pedido. É bem fácil:

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

Onde MyFilter() Retorne uma string como esta: "ID_CLIENT = 1 or ID_CLIENT = 2"

NB: Não use a mancha e. leva a e erro. usar and não AND

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top