次の方法で共有


方法 : アプリケーションレベルのエラーを処理する

更新 : 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 イベント ハンドラがすべての未処理エラーを処理します。

24395wz3.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

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 メソッドを呼び出して、エラーをクリアする必要があります。

セキュリティ

悪意を持ったユーザーがアプリケーションに問題を引き起こす可能性があるエラー情報は表示しないでください。詳細については、「方法 : 安全なエラー メッセージを表示する」を参照してください。

参照

処理手順

方法 : ページ レベルのエラーを処理する

概念

エラー ハンドラの完全なコード例