4

maxRequestLength次のように web.config (MVC) でa を指定しました。

  <location path="File/Upload">
    <system.web>
      <httpRuntime maxRequestLength="330"/>
    </system.web>
  </location>

330kb を超えるファイルのアップロードのテスト中にネットワーク タブを確認すると、サーバーからの応答500と詳細がThe required anti-forgery form field &quot;__RequestVerificationToken&quot; is not present.

これはなぜですか?maxRequestLengthフレームワークは、応答で詳細を提供できませんか? それとも、システムに関する情報を漏らしたくないだけなのでしょうか?

それとも、制限に対応するためにリクエストが切り捨てられたり切り取られたりして、リクエスト検証トークンが誤って削除されたのでしょうか?

ノート

これは 330kb を超えないファイルで問題なく動作し、私のアップロードは動作します。

4

3 に答える 3

0

maxRequestLength を 330 に設定しているようですが、これがファイル アップロードの制限です。この値は以下の規則に従います。

1Mb = 1024kb

詳細については、次を参照してください。

https://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.maxrequestlength(v=vs.110).aspx

したがって、maxRequestLength="330" を設定すると、ファイルのアップロードが 330kb に制限されていることがシステムに認識されます。

于 2016-02-22T03:46:12.460 に答える
0

サンプル プロジェクトで問題を再現しようとしましたが、さらに調査したところ、ASP.NET MVC コントローラー アクションが web.config ファイルの場所要素を使用していないことがわかりました。これは、ファイルをディスクにマップする ASP.NET とは異なり、ASP.NET MVC はルーティングを使用するためです。以下のリンクで回答を確認できます。これは別の質問に関連していますが、場所タグが使用されていないことに注意してください。

統合認証を使用して、すべてのユーザーが Web サイト内の 1 つのルートにアクセスできるようにするにはどうすればよいですか?

この場合、フレームワークは、アップロード アクションのファイル サイズに制限を適用できない可能性が高くなります。

500 内部サーバー エラーを再現できないため、完全にはわかりませんが、ロケーション要素が原因でフレームワークが web.config を正しく解釈できなかったことが原因である可能性があると思います。

偽造防止トークンに関するエラーについては、( @Html.AntiForgeryToken()を使用して) ビューに存在し、フォームを送信する前にスクリプトがそれを DOM から削除しないことを確認してください。

于 2016-02-22T13:43:00.200 に答える
0

あなたのアクションの 1 つ (ファイルのアップロードを処理するものとは限りません) に[ValidateAntiForgeryToken]属性があり、代わりにそのアクションからエラーが発生していると思われます。

プロジェクト内のすべての属性を一時的にコメントアウトして[ValidateAntiForgeryToken]、制限を超えるファイルをアップロードしようとしたときに実際に何が返されるかを確認することをお勧めします。

于 2016-02-22T12:31:56.407 に答える