2017-05-01 18 views
0

私のチームと私はMVC5プロジェクトでデータレイヤーを実装しています。 Web API /バックエンドコードでODataを使用しています。クエリー文字列の文字制限を打ち始めるまで、すべてがうまく機能します。例えば大量のパラメータをODataに渡す最善の方法

これは動作します:

​​

これは動作しません:私は受信

http://localhost:123456/api/GetSalesTaxRate(IdentityField=['11-3011,11-2011,11-9041,11-1011,11-3111,11-3021,11-9021,11-9032,11-9031,11-9039,11-9033,11-9161,11-9013,11-3031,11-9051,11-9061,11-9071,11-1021,11-3121']) 

エラーは次のとおりです。

悪い要求。 HTTPエラー400です。要求URLは無効です。

は、リソースの読み込みに失敗しました:サーバーは400 私は($フィルタ機構を使用して)のODataを介してクライアント側のフィルタリングを使用しようとしました

(不正なリクエスト)、だけでなく、サーバーの状態で応答しました([FromODataUri] IEnumerable <文字列>をメソッドのパラメータとして渡すことによる)カスタムデータコントローラのフィルタリング。どちらも私の状況には限界があります。私は失敗したこれらのweb.configファイルの設定を試してみました Bad Request - Invalid URL web api

<system.web><httpRuntime targetFramework="4.6.1" requestValidationMode="4.0" maxQueryStringLength="2097151" maxUrlLength="10999" relaxedUrlToFileSystemMapping="true" enable="true" />..... 
<security><requestFiltering><requestLimits maxQueryString="2097151" maxUrl="10999"/>.... 

私はこれを取得しようとしています

は私が失敗し、ここstackoverflowの答えから[UrlSegmentMaxLength]のレジストリ設定を試してみました私たちのネットワーク上のWebサーバーに展開する前に、私のローカルボックスで作業します。これをローカルで動作させるにはどうすればよいですか?このエンドポイントに、私が渡す必要がある多くの "IdentityField"値を受け入れる方法を教えてください。私はそれをIEnumerable < string>と同様に単一の文字列として渡そうとしました。私は両方に限界があります。

これとは別のアプローチが必要ですか?私はPOSTメソッドを使用するように読んだが、私はそれを行う方法がわからない。私は、これらの "IdentityField"文字列をこの終点に約800文字(約10,000文字)まで渡す機能が必要です。任意の提案やアイデア?ありがとうございました!

+1

POSTは間違いなく好ましい方法であるIISの制限です。データを取得するだけの場合は、1つのURLに6k個の識別子を渡す必要があるパターンを再考する必要があると思います。 idsの他にこれらのアイテムを識別するのに役立つ他に何かがありますか? APIのユーザーは、これらのIDをあなたのサービスに渡すためにどのようにIDを取得していますか? サービスに渡すことができる共通の機能を共有し、どのエンティティが適用されるかを把握しているのでしょうか? –

+0

@MikeMcCaughanありがとうマイク。残念ながら、これらのIDは、これらのIDを収集するために使用されるトップレベルの属性です。私はデータを変更する必要はなく、クエリと読み取り(GET)のみを行う必要はありません。 IDは、UIのピッカーから選択されています。 – AussieJoe

+0

UIで、ピッカーから6,703個のアイテムを選ぶ方法があるのはちょっと驚きです...これはおそらく「すべて選択」のようなものでしょうか?それは、そのケースを可能にするために第2のエンドポイントを使用することによってより効果的になる可能性があるからです。 –

答えて

1

最大要求の長さを変更してください。それはあなたがデータを変更する必要がある場合

<configuration> 
<system.web> 
    <httpRuntime maxRequestLength="1048576" /> 
</system.web> 

関連する問題