任意の長さの要求を許可するようにweb.configを構成する方法


137

textarea要素の値からファイルクライアント側を作成したいサイトを構築しています。

これを行うためのコードを用意していますが、このエラーが発生します

HTTPエラー404.15-見つかりませんリクエストフィルタリングモジュールは、クエリ文字列が長すぎるリクエストを拒否するように設定されています。

任意のサイズのリクエストを処理できるようにこれをオーバーライドする方法はありますか?

そうでない場合、filesystem / active xオブジェクトを使用せずにクライアント側でファイルを生成する方法はありますか?

ありがとう


8
考慮したいのは、クエリ文字列の長さがIISまたはアプリケーションで構成可能であっても、URLの長さにはHTTP標準があるということです。クエリ文字列を使用しているので、URLの一部として値を渡します。URLの最大文字数は2000文字です。値が長い文字列になる場合は、クエリ文字列で渡すのではなく、POSTすることをお勧めします。
Jeff LaFay 2012

2
ジュラファイに同意します。2〜3を超える単純なパラメーターがある場合は、値をPOSTすることがベストプラクティスです。クエリ文字列を使用する場合は、必ず暗号化してください。
ジャック

回答:


242

以下をweb.configに追加してください:

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

見る:

http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits

コメントを反映するように更新されました。

requestFilteringのrequestLimits要素[IIS設定スキーマ]

あなたは同様にあなたのweb.configに以下を追加する必要があるかもしれません

<system.web>
    <httpRuntime maxQueryStringLength="32768" maxUrlLength="65536"/>
</system.web>

参照:httpRuntime要素(ASP.NET設定スキーマ)

もちろん、上記の構成設定の数値(32768および65536)は単なる例です。これらの正確な値を使用する必要はありません。


24
それだけでは十分ではありませんでした。これをsystem.webセクションにも追加する必要がありました:<httpRuntime maxQueryStringLength = "8192" />
Rob Sedgwick

2
nnnは、許可する文字列の最大長です。たとえば、32768
Matt Varblow


私はそれぞれを個別に試し、system.webServerの下にセキュリティノードを設定してから、属性を削除してhttpRuntimeノードに追加しました。私は間違いなく両方を働かせる必要がありました。どうもありがとう!
David Gunderson、2015

2
注:<httpRuntime>タグは<system.web>の下にあります:<system.web> <httpRuntime maxQueryStringLength = "32768" maxUrlLength = "65536" /> </ system.web>
LePatay

33

私の場合(Visual Studio 2012 / IIS Express / ASP.NET MVC 4アプリ/ .Net Framework 4.5)、30分の試行錯誤の後に実際に機能したのmaxQueryStringLengthは、<httpRuntime>タグのプロパティを設定することでした。

<httpRuntime targetFramework="4.5" maxQueryStringLength="10240" enable="true" />

maxQueryStringLengthデフォルトは2048です。

詳細はこちら:

許可されるURLの範囲の拡大


@MattVarblowが示唆する<system.webServer>ように設定しようとしましたが、機能しませんでした...これは、Windows 8を搭載した開発マシンでIIS Express(IIS 8ベース)を使用しているためです。

アプリを運用環境(IIS 7がインストールされたWindows Server 2008 R2)に展開すると、IE 10は長いクエリ文字列を含むAJAXリクエストで404エラーを返し始めました。次に、問題はクエリ文字列に関連していると思い、@ MattVarblowの答えを試しました。IIS 7で動作しました:)


2
私にとって、魔法が起こされたのはenable = "true"
でした

6

他に確認すること:サイトがMVCを使用している場合、ログインコントローラクラスに[Authorize]を追加すると、これが発生する可能性があります。ログインメソッドにアクセスできません。認証されていないため、ログインメソッドにリダイレクトされます->ブーム。


ありがとう!メニュー/ナビゲーションを部分的なビューと匿名接続を許可しない別のコントローラーに移動したため、この問題が発生しました。
Westerlund.io

エラーメッセージが真実であるにもかかわらず、実際の問題とは関係がない別のケース。
スティーブスミス

1
また、Windows認証が「有効」で匿名認証が無効になっている可能性があるため、プロジェクトのプロパティも確認してください。Plsはこの詳細な記事をチェックしてください- エラー(Visual Studio 2013、MVC5):要求フィルターモジュールは、クエリ文字列が長すぎる要求を拒否するように構成されています
fujiFX

5

IIS 8.5 Webサーバーの実行中にこの問題が発生した場合は、次の方法を使用できます。

まず、作業中のIISサイトで「リクエストフィルタリング」モジュールを見つけ、それをダブルクリックします...

ここに画像の説明を入力してください

次に、以下に示す白い領域を右クリックして、[ 機能設定の編集 ]というコンテキストメニューオプションをクリックする必要があります。

ここに画像の説明を入力してください

次に、「クエリ文字列(バイト)の最大」の値を2048から、ニーズに応じて5000などのより適切な値に変更します。

ここに画像の説明を入力してください


ありがとう、これは私にとって最もシンプルで実用的なソリューションです
Afif Zafri

どうも!!!!!
Noobie

0

ASP WebアプリケーションをIIS 8に展開しようとして同様の問題がありました。それを修正するために、MattとLenielが上記で提案したように行いました。しかし、匿名認証を有効にするには、サイトの認証設定も構成する必要がありました。そしてそれは私のために働いた。


0

ユーザーがまだ認証されていないため、ログインページのActionResult関数に[AllowAnonymous]を追加する必要がありました。


0

Webサイトが認証を使用しているが、IISで正しい認証方法が設定されていない場合(Basic、Formsなど)、ブラウザーはリダイレクトループでスタックします。これにより、リダイレクトURLは爆発するまで長くなります。


0

また、ajax呼び出しパラメーターに大きな文字列を渡すと、エラーが発生します。

そのため、常にajaxでタイプpostを使用すると、問題が100%解決 され、web.configで長さを設定する必要はありません。

// var UserId = 1000ユーザーIDの配列

$ .ajax({global:false、url:SitePath + "/ User / getAussizzMembersData"、 "data":{UserIds:UserId}、 "type": "POST"、 "dataType": "JSON"}}


-1

HTTPエラー404.15-見つかりませんリクエストフィルタリングモジュールは、クエリ文字列が長すぎるリクエストを拒否するように設定されています。

この問題を解決するには、Formタグにプロパティmethodが取得/設定状態であるかどうかをソースコードで確認します。

その場合は、methodプロパティを削除する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.