2011-01-27 9 views
1

ベストプラクティスに焦点を当てた回答をここで説明します。ASP.Netの例外 - ページをキャッチしたり、Global.asax(Application_Error)のハンドルを受け取ります。

ASP.Netアプリケーションのプレゼンテーションレイヤーは、ビジネスレイヤーからスローされた例外をキャッチして処理する必要がありますか、またはそれらをバブルアウトする必要がありますか?Global.ascx ' s Application_Errorハンドラ?

つまり、あなたが例外を「ハンドル」本当にする必要がある場合..

protected void Application_Error(object sender, EventArgs e) 
    { 
     logExceptionDetails(Server.GetLastError()); 
     HttpContext.Current.Server.Transfer("~/Error.aspx");; 
    } 

おかげ

答えて

5

に、この記事を見てみましょう間違えた。

これはすべてゼロコード(web.configで設定)で行うことができます。

+2

ELMAHでは、実際のログに加えて、電子メール、ツイッターなどの任意の数のメッセージシンクをフックできる追加の(銀河の)機能を提供します。真剣に、数分でElmahをチェックしてください:http://code.google.com/p/elmah/ –

+0

リンクChrisさん、ありがとうございます。 – Greg

+0

ありがとう、私は見てみましょう。 – cweston

0

さて、あなたは例外が発生する可能性がありますあなたのコード内のtry-catchをブロックする必要があります。

選択する方法は、イベントが発生する頻度によって異なります。イベントが本当に例外的であり、エラー(予期しないファイルの終わりなど)である場合、通常の場合は少ないコードしか実行されないため、例外処理を使用する方が効果的です。イベントが日常的に発生する場合は、プログラム方法を使用してエラーをチェックする方が良いでしょう。

しかし、「捕捉されていない」ログ例外を見ている場合は、表示されているようにGlobalのエラーイベントを使用する必要があります。これがベストプラクティスです。実際、これをHttpModuleとして実装すると、Exception処理が非侵害的で、他のアプリケーションにプラグインされたり、単にweb.configファイルを変更するだけで削除できます。

例外への私のアプローチは、それらが起こるとElmahでそれらをログに記録し、その何か私のユーザーに通知するために、組み込みのCustom Error Pageメカニズムを使用できるようにすることです4GuysFromRolla

http://www.4guysfromrolla.com/articles/081209-1.aspx

関連する問題