2009-02-27 18 views
0

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

代わりにApplication_Errorイベント内の例外を処理し、Response.Writeとそれ以外のものを実行する必要があります。それは醜いです。状況によっては、応答ストリームが既にフラッシュされている可能性があることを理解しているので、要求を転送することは実際の選択肢ではありません。私が尋ねたいのは、この問題に対する優雅な解決策を見つけた人がいるかどうかです。

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

ライフサイクルが遅れている場合は、Response.WriteApplication_Errorから直接送信する必要がありますが、早ければServer.Transferを行うことができます。問題はServer.Transferを実行しようとすると、それがリクエストに含まれている場合にはそれ自体が例外を引き起こすことです。

だから、応答でクリエイティブなことをするのが遅すぎるかどうかを示すグローバルな列挙型などがありますか?

答えて

2

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

Transparent generic exception handling for asp.net/MOSS2007 (with code)

0

私は、このために私のアドバイスは、エラーのWMIイベントプロバイダで監視ASP.NET健康を使用することだと思う:ここ

はどのようにあります。このことができます

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

希望:

アンドリュー

+0

こんにちは、ありがとうと思います。 外部コンソールアプリケーションは、私が望むものを実際には助けてくれません(私はすでにかなりうまくいっています)。しかし、フレンドリーなエラーメッセージも表示します。 –

+0

カスタムエラーページを使用していますか?これにより、任意のリクエストの結果に基づいてスローされる任意のHTTPステータスコードに基づいてカスタム情報を表示できますか? –

+0

ASP.NETはすべてのリクエストをエラーページにリダイレクトします(たとえば、Server.Transferを実行する代わりに)、そのため使用できません。 –

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ソースを見て、それがどうなっているのかを確認することをお勧めします。

+1

ASP.NETのカスタムエラーは、301または302応答コードを使用してユーザーを新しいURLに物理的にリダイレクトするため、まったく役に立たない。基本的なRESTfulな設計と常識では、どのリソースが失敗したかを反映するためにURLは同じままでなければならないと言われています。リダイレクトすると完全に破損します。 –

関連する問題