質問
ブラウザには URL の長さに制限があります。IE には、URL の長さが 2K 文字を超えてはいけないという制限があります。
$filter = クエリを作成すると、複数の入力値と比較できます。このような場合、URL の長さは 2K を超えます。
OData は URL の長さに制限を設けていますか?
ありがとう
解決
OData自体はURLの長さを制限しませんが、ご指摘のとおり、ほとんどのクライアントとサーバーは制限します。したがって、通常は、URLを長すぎないようにすることをお勧めします。
参照する問題(Contains演算子の実装など)には、2つの回避策があります。
1)サービス操作を使用して、このようなクエリを処理します。文字列などとしてエンコードされた複数の入力値を渡すこともできますし、サービスオペレーションがこれらを事前に知っていることもあります。
2)長い$ filterを使用しますが、$ batchリクエストでリクエストを送信します。利点は、URLの制限がはるかに大きく、URLに到達する可能性が非常に低いことです。欠点は、GETリクエストを実行しようとしても、$ batchが原因でWeb上でPOSTリクエストとして移動するため、キャッシュされないことです。
他のヒント
延期します @Vitekの答え OPの質問に対して:
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" ... />
$batch
がどのように使用されているかわかりませんでした。そのため、長いリクエストを送信するために$filter
を使用しました。とても簡単です:
ジェネラコディセタグプレ
ここで、MyFilter()
は次のような文字列を返します:"ID_CLIENT = 1 or ID_CLIENT = 2"
注意:大文字のANDは使用しないでください。それはエラーにつながります。and
ではなくAND
を使用する