質問

ブラウザには 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を使用する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top