web-dev-qa-db-ja.com

[Authorize]を使用すると、要求が構成済みのmaxQueryStringLengthを超えています

enter image description here
C#にMVC3サイトがあり、JavaScript関数からクエリパラメーターが渡される特定のビューがあり、関数は

window.location.href = "../ActionName?" + query_string;

query_stringは、JavaScript関数によって作成された動的クエリパラメーター文字列です。

この奇妙な理由は、reportviewerコントロールを使用する必要があるため、同じ関数がURLをASP.Net Webフォームに渡すことがあるためです。代替アクションは、この場合、いくつかのパラメーターを保存することですビューに。 (それが意味をなさない場合はさらに詳しく説明できます)

アクションメソッドに[Authorize]を紹介するまで、すべてが正常に機能します。所定の位置にある場合は中断し、なしで正常に機能し、[Authorize]は他のすべての方法で正常に機能します。

この場合のURL全体の長さは966文字です。調査後、デフォルトではmaxQueryStringLength値は2048ですが、整数型の任意の値にオーバーライドできるようです。

<security>
  <requestFiltering>
    <requestLimits maxQueryString="2048"></requestLimits>
  </requestFiltering>
</security>

キーの下のWeb設定ファイルへのキー。

そこには喜びがなかったので、私はばかげて4096にしたが、まだ喜びはなかった。

現在、URL全体が966文字の長さであるため、authorize属性は別の1082〜3130文字を追加することはできません。エラーが実際に何であるか、または設定が有効にならない理由を判断するにはどうすればよいですか?.

VS2010 Pro SP1

118
Sabre

承認されていないリクエストが届くと、リクエスト全体がURLエンコードされ、クエリ文字列としてリクエストに承認フォームに追加されるため、状況に応じて問題が発生する場所を確認できます。

MSDNによると、web.configのmaxQueryStringLengthをリセットするために修正する正しい要素は、<httpRuntime>要素内の<system.web>要素です。 httpRuntime要素(ASP.NET設定スキーマ) を参照してください。その要素を変更してみてください。

69
counsellorben

プロジェクトのルートweb.configsystem.webノードの下:

<system.web>
    <httpRuntime maxUrlLength="10999" maxQueryStringLength="2097151" />
...

さらに、system.webServerノードの下にこれを追加する必要がありました。そうしないと、長いクエリ文字列のセキュリティエラーが発生しました。

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="10999" maxQueryString="2097151" />
      </requestFiltering>
    </security>
...
199
theJerm

この問題に遭遇する可能性があり、上記のオプションのいずれでも解決されない他の人にとって、これは私にとってうまくいったことです。

1. Click on the website in IIS
2. Double Click on Authentication under IIS
3. Enable Anonymous Authentication

私たちは独自の認証を使用していたため、これを無効にしましたが、これはこの同じ問題につながり、受け入れられた答えは何の助けにもなりませんでした。

5
dball

私はdatatables.netを使用してこのエラーがあります

dataTable()のプロパティでデフォルトのajax GetをPOSTに変更する問題を修正しました。

"ajax": {
        "url": "../ControllerName/MethodJson",
        "type": "POST"
    },
4
elblogdelbeto