0

この質問は、ASP.NET要求のライフサイクル中に発生する例外を最適に処理する方法に関するものであるという点で、ASP.NETでのURIハッキングの処理に関連しています。ほとんどの例外を適切に処理する方法を見つけましたが、リクエストの後半にいくつかの例外が発生するため、Server.Transferエラープレゼンテーションロジック全体を独自のページにコンパートメント化するような方法がないことがわかりました。

したがって、Application_Error代わりにイベント内で例外を処理し、 Response.Writesなどを実行する必要があります。それは醜いです。状況によっては、応答ストリームがすでにフラッシュされている可能性があることを理解しています。そのため、要求を転送することは実際にはオプションではありません。私が聞きたいのは、この問題のエレガントな解決策を見つけた人がいるかどうかです。

また、リクエストを別のページに転送することで例外を適切に処理できるかどうかを知るのは難しいと思います。例外が発生したときにリクエストライフサイクルのどこにいるかを知るための最良の方法は何ですか?ページの読み込みとレンダリング中に発生した場合は、Page_Errorそれを処理できるようになりますが、まだ問題はServer.Transferありません。しかし、例外が発生するのが早すぎるか遅すぎるためPage_Errorにキャッチできず、バブルが発生した場合、Application_Errorそれが早いか遅いかを知るにはどうすればよいですか?

ライフサイクルが遅い場合は、Response.Writeから直接実行する必要がありますApplication_Errorが、早い場合は実行できますServer.Transfer。問題は、Server.Transferそれが要求に含まれている場合、それ自体が例外を引き起こすことです。

それで、応答で創造的なことをするのに遅すぎるかどうかを示すグローバルな列挙または同様のものはありますか?

4

3 に答える 3

2

このアプローチを使用して、Web コントロールまたはページで生成されたすべてのエラーをキャッチしました。基本クラス (ページ用とユーザー コントロール用) から継承するだけで、各ページまたはユーザー コントロールは独自の HandleException メソッドを実装し、必要なことは何でも実行できます。完全なコードはこちら:

asp.net / MOSS2007 の透過的な汎用例外処理 (コード付き)

于 2009-03-02T07:07:00.587 に答える
0

これに対する私のアドバイスは、エラーに対して WMI イベント プロバイダーで ASP.NET Health Monitoring を使用することだと思います。

ここに方法があります。

http://msdn.microsoft.com/en-us/library/ms178713.aspx

お役に立てれば:

アンドリュー

于 2009-02-27T09:59:03.287 に答える
0

asp.net 構成を使用して、未処理の例外の一般的なエラー ページを表示することをお勧めします。サンプル web.config から

    <!--
        The <customErrors> section enables configuration 
        of what to do if/when an unhandled error occurs 
        during the execution of a request. Specifically, 
        it enables developers to configure html error pages 
        to be displayed in place of a error stack trace.

    <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="NoAccess.htm" />
        <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>
    -->

ハンドラー全体で、例外をログに記録し、asp.net にリダイレクトさせます。

それでも顧客へのアプローチを続けたい場合は、利用可能なasp.netソースを見て、それがどのように行われているかを確認することをお勧めします.

于 2009-03-02T07:35:41.377 に答える