2010-11-22 11 views
7

navegadores tienen limitación en la longitud de las URLs. IE tiene la limitación de que la longitud de la URL no debe exceder los 2K caracteres.OData Url Longitud Limitaciones

Cuando formo un filtro es igual a $ consulta, he podido comparar con múltiples valores de entrada. En tal caso, la longitud de la Url excedería los 2K.

¿El OData establece ningún límite a la longitud de la URL?

Gracias

Respuesta

6

OData en sí no limita la longitud de la URL, pero como se ha anotado la mayoría de los clientes y servidores hacen. Por lo general, es una buena práctica no generar URL demasiado tiempo.

El problema que se refieren a (aplicación del operador Contiene, o algo similar) tiene dos soluciones posibles:

1) Use la operación del servicio para manejar tales consulta para usted. Posiblemente pueda pasar los múltiples valores de entrada codificados como una cadena o algo así, o tal vez la operación de servicio los sepa de antemano de todos modos.

2) utilizar el filtro $ largo, pero enviar la solicitud en una solicitud $ lotes. La ventaja es que el límite en la URL es mucho mayor y es muy poco probable que lo golpees. La desventaja es que, aunque está intentando ejecutar una solicitud GET, debido al $ batch viaja como solicitud POST a través de la web y, por lo tanto, no se almacenará en caché.

0

No he encontrado cómo se utiliza el $batch. así que usé $filter para enviar una solicitud larga. Es bastante fácil:

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

donde MyFilter() devuelve una cadena como esta: "ID_CLIENT = 1 or ID_CLIENT = 2"

NB: No utilice el mayúsculas y. conduce a un error utilizar and no AND

+4

No veo cómo responder la pregunta de OP. ¿Cómo se relaciona esto con la longitud de la URL que es demasiado larga? – Jerther

1

delego en @Vitek's answer a la pregunta del OP:

OData itself doesn't limit the length of the Url

Pero si otras personas que llegan aquí debido a limitaciones IIS: The request filtering module is configured to deny a request where the query string is too long., pueden beneficiarse de mi respuesta. Siga las instrucciones de ese error:

Verify the configuration/system.webServer/security/requestFiltering/[email protected] setting in the applicationhost.config or web.config file.

sigue las instrucciones:

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

También puede obtener este error: The length of the query string for this request exceeds the configured maxQueryStringLength value.

Esta técnica se describe here y here, y parece esto:

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