Question

ont Browsers limitation de la longueur des URL. IE a limitation cette longueur ne doit pas dépasser Url 2K caractères.

Quand je forme un filtre $ est égal à la requête, je pourrais comparer avec plusieurs valeurs d'entrée. Dans ce cas, la longueur de l'URL dépasse 2K.

Est-ce que OData ensembles des limites sur la longueur de l'URL?

Merci

Était-ce utile?

La solution

OData lui-même ne limite pas la longueur de l'URL, mais comme vous l'avez noté la plupart des clients et des serveurs faire. Donc, en général, il est un bon PRACTIVE pour ne pas produire URL trop long.

Le problème que vous référer à (mise en œuvre du opérateur Contient, ou quelque chose de similaire) a deux solutions de contournement possibles:

1) opération de service utiliser pour gérer cette requête pour vous. Vous pouvez éventuellement transmettre les valeurs d'entrée multiples codées comme une chaîne ou quelque chose comme ça, ou peut-être l'opération de service connaît ces à l'avant de toute façon.

2) Utilisez le filtre à long $, mais envoyer la demande dans une demande de lot $. L'avantage est que la limite de l'URL est beaucoup plus grand et il est très peu probable que vous frapper. L'inconvénient est que même si vous essayez d'exécuter une requête GET, en raison du lot $ il se déplace comme une requête POST sur le Web, et donc il ne sera pas mis en mémoire cache.

Autres conseils

Je defer @ réponse Vitek à la question de l'OP:

  

OData lui-même ne limite pas la longueur de l'URL

Mais si d'autres qui arrivent ici à cause de limites IIS : The request filtering module is configured to deny a request where the query string is too long., ils peuvent bénéficier de ma réponse. Suivez les instructions de cette erreur:

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

Suivez les instructions suivantes:

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

Vous pouvez aussi obtenir cette erreur: The length of the query string for this request exceeds the configured maxQueryStringLength value.

Cette technique est décrite ici et ici , et il ressemble à ceci:

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

Je ne trouve pas comment le $batch est utilisé. donc je $filter pour envoyer une demande pressante. Son assez facile:

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

MyFilter() retourne une chaîne comme ceci: "ID_CLIENT = 1 or ID_CLIENT = 2"

NB: Ne pas utiliser les majuscules et. elle conduit à l'erreur. utilisation and pas AND

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top