1

誰かを想定します:

  1. 訪問とASPXページ(http get request)。
  2. ファイルアップローダーに「大きすぎる」ファイルを設定し、アップロードボタンをクリックします(http postrequest)。

カスタムエラーページを提供してもかまいません。それはばかげており、アプリケーションを混乱させます。

プログラムでエラーを処理したい。ここに掲載されているように、global.asaxのApplication_BeginRequestハンドラーによって(要求全体が受信された後)インターセプトされる可能性があります。

私がやりたいのは、リクエストから特大のファイルを削除し、「HttpContext.Current.Items ["filetoolarge"] = true」のようなフラグを設定してから、同じページにServer.Transferを実行することです。これにより、ファイルが送信されなかったかのようにリクエストが実行されます。ただし、このエラーフラグがあり、ページが見つかった場合はもちろんチェックして、適切なエラーメッセージを表示します。

これはできますか?

4

3 に答える 3

0

web.configを次のような大きな値に設定maxRequestLengthします。

<system.web>
        <httpRuntime maxRequestLength="26000" executionTimeout="600"/>
</system.web>

大きなファイルを受け取ることができます。次に、次のように処理します。

        If fileUploader.PostedFile.ContentLength > theSize Then
            'show error'
        else
            'process it'
        End If

それが役に立てば幸い。

アップデート:

maxRequestLengthKB単位です。

PostedFile.ContentLengthバイト単位です。

于 2011-04-12T22:31:06.800 に答える
0

FlashまたはActiveXを使用せずにこれを行う方法を知っている唯一の方法は、maxRequestLengthを高い値に設定し、JavaScriptを使用して、ファイルが使用可能になったらファイルに関する情報にアクセスし、キャンセル/エラー処理を処理することです。Telerikアップロードコントロールを使用して実行しましたが、同様のことができるはずです。

于 2011-04-12T21:42:40.777 に答える
0

ここに解決策を投稿しました:IIS7で超過したmaxAllowedContentLengthをどこでキャッチして処理しますか?

私の解決策は、ページのOnErrorハンドラーをオーバーライドすることです。これは、最後の例外をHttpExceptionとして取得し、WebEventCodeプロパティをチェックすることを含むため、.NET4.0でのみ機能すると思います。これは.NET4.0フレームワークでは新しいようです。

Application_EndRequestグローバルアプリケーションハンドラーをインターセプトする別の解決策があります。ここでは、StatusCodeプロパティ値とSubStatusCodeプロパティ値の両方が使用可能ですが、EndRequestまでに応答がクライアントにフラッシュされている可能性があるため、機能しないと思います。イベントが発生します。

私の経験では、OnErrorメソッドとApplication_EndRequestメソッドはどちらも、サーバーがリクエスト全体を受信する可能性が高くなるずっと前に、ほぼ即座に実行されるため、リクエストサイズに関する早期警告の結果として起動される可能性があります。

私はOnErrorメソッドをテストしましたが、サーバーの応答を処理して表示する前にブラウザーが要求のアップロードを終了することを要求する避けられない遅延を除けば、問題なく動作します。

Webイベントコードに関する情報はここにあります-http://msdn.microsoft.com/en-us/library/ff650306.aspx

于 2011-04-14T21:53:25.000 に答える