方法 : アプリケーションレベルのエラーを処理する
更新 : 2007 年 11 月
次のコード例では、要求の処理中に処理されなかったすべての ASP.NET エラー (つまり、Try/Catch ブロックにより、またはページレベルのエラー ハンドラでキャッチされなかったすべてのエラー) をキャッチするエラー ハンドラを Global.asax ファイルで作成する方法を示します。この例ではハンドラは、エラーを解釈し適切なメッセージを表示する汎用エラー ページ (GenericErrorPage.aspx) にコントロールを送ります。
使用例
次の例は、「エラー ハンドラの完全なコード例」の完全なコード例の一部です。
Global.asax ファイルでエラー イベント ハンドラを有効にするには、Web.config ファイルで defaultRedirect のファイルを指定できません。構成ファイルが優先されます。そのため、customErrors を Off に設定するか、defaultRedirect 設定を削除できます。Web.config 構成ファイルに、Off に設定された customErrors がある場合、Global.asax の Application_Error イベント ハンドラがすべての未処理エラーを処理します。
セキュリティに関するメモ : |
---|
Global.asax ファイルに Application_Error ハンドラがない場合、Web.config ファイルの customErrors を Off に設定しないでください。Web サイトに関する情報が、サイトにエラーを発生させるようなユーザーに公開される危険性があります。 |
堅牢性の高いプログラム
できれば、グローバル エラー ハンドラには依存せずに、エラーが発生しやすいコードに Try/Catch ブロックを使用してください。
Global.asax ファイルで定義されるエラー ハンドラは、ASP.NET ランタイムによる要求の処理中に発生するエラーのみをキャッチします。たとえば、アプリケーションに存在しない .aspx ファイルをユーザーが要求した場合のエラーをキャッチします。ただし、ユーザーが存在しない .htm ファイルを要求した場合は、エラーをキャッチしません。ASP.NET 以外のエラーについては、インターネット インフォメーション サービス (IIS: Internet Information Service) でカスタム ハンドラを作成できます。カスタム ハンドラはサーバーレベルのエラーについては呼び出されません。
Global.asax ファイルから要求のエラー情報を直接出力できません。コントロールを一般的には Web フォーム ページなどの別のページに送る必要があります。コントロールを別のページに送るときは、Transfer メソッドを使用します。この結果、現在のコンテキストを保持し、GetLastError メソッドからエラー情報を取得できます。
エラーを処理した後、Server オブジェクト (HttpServerUtility クラス) の ClearError メソッドを呼び出して、エラーをクリアする必要があります。
セキュリティ
悪意を持ったユーザーがアプリケーションに問題を引き起こす可能性があるエラー情報は表示しないでください。詳細については、「方法 : 安全なエラー メッセージを表示する」を参照してください。