カスタム エラー ページを ASP.NET でを Visual C# .NET を使用してレポートを作成する方法

文書翻訳 文書翻訳
文書番号: 306355 - 対象製品
この記事は、以前は次の ID で公開されていました: JP306355
すべて展開する | すべて折りたたむ

目次

概要

Visual C# .NET コードを使用して、トラップを ASP.NET でが発生した場合は、エラーに応答する方法を説明します。ASP.NET には、エラー処理オプションから従来 Microsoft Active Server Pages (ASP) が向上します。ASP.NET でのアプリケーションでいくつかの異なるレベルでのエラーを処理できます。

ASP.NET の新機能

ASP.NET のエラーに応答して処理をする方法のいくつかの進歩を提供します。従来の ASP でエラーを処理する"On Error Resume Next"(または JScript でtry-catchブロック) を使用します。代わりに、Microsoft インターネット インフォメーション サービス (IIS) 5.0 を実行している場合は、カスタム エラーのレポートのページを作成するASPErrorオブジェクト使用します。ただし、この方法では、制限があります。

ASP.NET ではいくつかのレベルでは処理し、ASP.NET アプリケーションを実行するときに発生する可能性のあるエラーへの応答を提供します。ASP.NET は、トラップし、エラーが発生したときに応答するための 3 つの主要な方法を提供: Page_Errorためのアプリケーションの構成ファイル (Web.config)。

この資料では、ASP.NET アプリケーションでこれらの新機能を使用する方法を示します。ここでは、カスタム エラー ページを ASP.NET に直接関連する一般的なエラー報告の提供方法について説明、その他のエラーの処理、 try -ブロックや共通言語ランタイム (CLR) の例外システムなどの方法については扱いません。

Page_Error メソッドを使用する方法

Page_Errorイベント ハンドラーは、ページ レベルで発生するエラーをトラップする方法を説明します。(次のサンプル コードは、) と単にエラー情報を表示できます、や、イベント ログに記録またはその他のアクションを実行します。

メモ 次の使用例は、デモンストレーション目的でのみ、ブラウザーで詳細なエラー情報を表示します。インターネット上でアプリケーションが実行している場合は特に、アプリケーションのエンドユーザーに詳細情報を表示するときに注意します。エラーが発生したことを通知して、実際にログオンし、エラーの詳細、イベント ログには、ユーザーにメッセージを表示する、適切な動作になります。

次の使用例は、null 例外を強制的にPage_Loadイベント ハンドラーで発生するエラーをスローします。この手順では、最初のページのPage_Errorイベントのハンドラーを使用してデモンストレーションを作成します。
  1. 名前 PageEvent.aspxto プロジェクトの新しいファイルを追加するこれらの手順に従います。
    1. Microsoft Visual Studio .NET を開きます。
    2. ソリューション エクスプ ローラーでプロジェクト ノードを右クリックし、追加] をポイントおよび、 Web フォームの追加] をクリックします。
    3. [名前] テキスト ボックスで次のように入力します。 PageEvent.aspx、し、[開く] をクリックします。
  2. PageEvent.aspx に次のコードを追加します。
    <script language=C# runat="server">
    void Page_Load(object sender, System.EventArgs e)
    {
    	throw(new ArgumentNullException());
    }
    
    public void Page_Error(object sender,EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"<b>Error Caught in Page_Error event</b><hr><br>" + 
    			"<br><b>Error in: </b>" + Request.Url.ToString() +
    			"<br><b>Error Message: </b>" + objErr.Message.ToString()+
    			"<br><b>Stack Trace:</b><br>" + 
    	                  objErr.StackTrace.ToString();
    	Response.Write(err.ToString());
    	Server.ClearError();
    }
    </script> 
    					

    メモ このコード サンプルでは、 AutoEventWireup属性が明示的に設定されていません。AutoEventWireup属性に assigna の値を明示的に場合は、既定値は trueです。Yourapplications の開発に Visual Studio .NET を使用している場合は、Web フォーム テンプレートのコードは明示的AutoEventWireup属性値をfalseに設定します。既定値の thatASP.NET は、重要な違いがあるし、既定値をこの属性に、Visual Studio .NET テンプレート codeassigns。かどうかのように、 AutoEventWireup属性値はfalseで宣言されているイベント ハンドラーに設定します。ASPX ページは notfire です。Thisfunctionality についてわからない場合は、混乱を招くことがあります。
  3. [ファイル] メニューから [ PageEvent.aspx の保存をクリックします。
  4. ページを右クリックし、ページを実行するには、 [ブラウザーで表示] をクリックします。エラーがスローされることと、コードの仕様に reportedaccording。
メモ コードは、 Server.ClearErrorする呼び出しを発行することがあります。これにより、エラーの継続のためのイベント ハンドラーになります。

さらに、 @ PageディレクティブのInherits属性のすることも必要があります。Inheritsを設定した場合、ページを参照する前に、プロジェクトをビルドする必要があります。まず、プロジェクトをビルドしない場合は、次のエラー メッセージが表示されます。
'Project.PageEvent' は、有効な型ではありません。

ための方法を使用する方法

Page_Errorイベント ハンドラーと同様のためのイベント ハンドラーをアプリケーションで発生するエラーをトラップするには、使用できます。イベントのアプリケーション全体のスコープにあるためのアプリケーションのエラー情報を記録またはその他のアプリケーション レベルのエラーが発生した場合を処理できます。

次のサンプルは、上記のコード サンプルのPage_Errorに基づいており、 Page_Errorイベント ハンドラーではPage_Loadでエラーがトラップされない場合に呼び出されます。ためのイベント ハンドラーは、アプリケーションの Global.asax ファイルで指定します。簡潔にするため、このセクションの手順では、例外をスロー、Global.asax ファイルは、のためのイベント ハンドラーでエラーをトラップすると、イベント ログへの書き込みのエラー新しいページを作成します。次の手順には、ためのメソッドを使用する方法を示しています。
  1. プロジェクトに AppEvent.aspx という名前の新しいファイルを追加します。
  2. AppEvent.aspx に次のコードを追加します。
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    メモ AutoEventWireup属性に関する「によって」セクションで説明した情報は、この手順では、サンプル コードも同様です。詳細については、「によって」セクション情報を参照してください。
  3. [ファイル] メニューから [ AppEvent.aspx を保存をクリックします。
  4. AppEvent.aspx ページのPage_Loadイベント ハンドラーで、その youthrow のエラーをトラップするには、Global.asax ファイルのためのイベント ハンドラーを追加します。Global.asax のイベント ログを使用する、 System.Diagnostics名前空間のusingステートメントの addanother する必要があることに注意してください。

    Global.asax ファイルに以下のコードを追加します。
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString()+ 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	Server.ClearError();
    	//additional actions...
    } 
    					
  5. Global.asax ファイルを保存します。
  6. Visual Studio .NET では、[ビルド] メニューの [ビルド] をクリックします。
  7. ページを右クリックし、[ブラウザーで表示] をクリックします。この場合、ページは空白になります、しかし、新しいエントリがイベント ログに追加された各必要があります。このサンプルは、イベント ビューアーからアクセスできるアプリケーション ログにエントリを作成します。Loggingthe エラーが発生した後可能性がある詳細ユーザー friendlyerror、別のページにユーザーをリダイレクトする、または必要な場合に追加処理を実行します。

Web.config ファイルを使用する方法

Server.ClearErrorを呼び出すことはできませんか、によってためのイベント ハンドラーは、エラー、エラーのトラップを処理する場合は、Web.config ファイルの<customErrors>セクションの設定に基づいています。[ <customErrors>] セクションで、既定のエラー ページ (defaultRedirect) として、リダイレクト ページが指定または発生した HTTP エラー コードに基づいて、特定のページを指定できます。このメソッドを使用するには、ユーザーが受信したエラー メッセージをカスタマイズします。

アプリケーションでは、前のレベルのいずれかでトラップされないエラーが発生した場合は、このカスタム ページが表示されます。このセクションでは、 Server.ClearErrorが呼び出されることはありませんには、Global.asax ファイルを変更する方法について説明します。結果として、エラーは、エラーをトラップするには、最後のポイントとして、Web.config ファイルで処理されます。 </customErrors></customErrors>
  1. Global.asax ファイルは、previousexample から開きます。
  2. 行をコメント アウト、 Server.ClearErrorにエラー サーフェス、Web.configfile であることを確認します。
  3. Global.asax に変更を保存します。コードは次のような nowappear が必要です。
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString() + 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	//Server.ClearError();
    	//additional actions...
    } 
    					
  4. 次のコードを追加、<customErrors>セクション、ユーザーをカスタム ページにリダイレクトする:<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    メモ 関連する Web サーバの機種名を参照するようdefaultRedirect属性にファイル パスを変更する必要があります。
  5. このレベルでトラップされたエラーは、既定のエラー ページを送信、ため、この例のエラー ページの .htm ページを使用するように提示された内容を制御するこのメソッドを使用していることに注意 ErrorStatus.htm.Keep という名前のエラー ページを作成するあります。ErrorStatus.htm に次を追加します。
    <HTML>
    <HEAD>
    <TITLE></TITLE>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
    </HEAD>
    <BODY>
         <b>Custom Error page!</b>
         <br>
         You have been redirected here from the <customErrors> section of the 
         Web.config file.
    </BODY>
    </HTML>
    					
  6. コードをテストするファイルの保存、プロジェクトをビルド、し AppEvent.aspx をブラウザーで表示します。エラーがスローされると、ErrorStatus.htm ページにリダイレクトされますに注意してください。
[ <customErrors>] セクションのdefaultRedirect属性の値に既定のエラー ページを参照することができますを基に、発生した HTTP エラー コードにリダイレクトするには、特定のページを指定することもできます。<error>の子要素は、このオプションを使用できます。例:<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
メモ <customErrors>セクションのdefaultRedirectで指定されているページは .htm ファイルです。私は

[ <customErrors>] セクションに、 mode属性on に設定されているにはが含まれていることを確認します。Mode属性は、エラーのリダイレクトが行われる方法を制御する使用されます。たとえば、アプリケーションを開発している場合は、ほとんどの場合、実際の ASP.NET エラー メッセージを表示するしてたくないよりわかりやすいエラー ページにリダイレクトされます。Mode属性には、次の設定が含まれています: </customErrors></customErrors>
  • : ハンドルされていない例外指定defaultRedirectページにユーザーをリダイレクトします。このモードは、本番環境で主に使用されます。
  • 無効: ユーザー、例外情報を受け取るし、 defaultRedirectページ redirectedto いないのは。このモードは、主に開発に使用されます。
  • RemoteOnly: (usinglocalhost) で、ローカル コンピューター上のサイトにアクセスするユーザーは、例外情報が表示されるだけです。他のすべてのユーザーは、 defaultRedirectページにリダイレクトされます。このモードは、主にデバッグのために使用されます。

トラブルシューティング

Microsoft Windows 2000 および Microsoft Windows XP のデフォルトのインストールでの ASP.NET ワーカー プロセスで Web アプリケーションのコードを実行します。ASPNET アカウントと呼ばれる特権のないローカル アカウントにデフォルトではこのプロセスの id です。ASP.NET のベータ リリースでは、プロセス id はシステム、多くの特権を持つコンピューター上の強力な管理アカウント。

Windows Server 2003 (IIS 6) で、既定のインストールでは ASP.NET のワーカー プロセスで Web アプリケーションのコードを実行します。NetworkService と呼ばれる制限付きのアカウントをデフォルトではこのプロセスの id です。

この変更および影響、この記事のコードおよび追加のアクセス権が必要な他のコードの実行に関する詳細については、次の Web サイトを参照してください。
セキュリティの変更、Microsoft.NET Framework のバージョン 1
http://msdn2.microsoft.com/en-us/library/ms994923.aspx

関連情報

詳細については、次のマイクロソフト Web サイトを参照してください。
.NET での例外管理

HttpServerUtility.ClearError メソッド

MSDN .NET 開発センター

Microsoft .NET ホーム ページ

プロパティ

文書番号: 306355 - 最終更新日: 2013年10月29日 - リビジョン: 2.0
この資料は以下の製品について記述したものです。
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
キーワード:?
kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:306355
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com