Asp.net-error-handling
ASP.NET-エラー処理
ASP.NETのエラー処理には3つの側面があります。
- トレース-ページレベルまたはアプリケーションレベルでプログラムの実行をトレースします。
- エラー処理-ページレベルまたはアプリケーションレベルで標準エラーまたはカスタムエラーを処理します。
- デバッグ-プログラムをステップ実行し、ブレークポイントを設定してコードを分析します
この章では、トレースとエラー処理について説明し、この章ではデバッグについて説明します。
概念を理解するには、次のサンプルアプリケーションを作成します。 ラベルコントロール、ドロップダウンリスト、およびリンクがあります。 ドロップダウンリストは有名な引用符の配列リストをロードし、選択した引用符は下のラベルに表示されます。 また、存在しないリンクを指すハイパーリンクがあります。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>
Tracing, debugging and error handling
</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblheading" runat="server" Text="Tracing, Debuggin and Error Handling">
</asp:Label>
<br/> <br/>
<asp:DropDownList ID="ddlquotes" runat="server" AutoPostBack="True" onselectedindexchanged="ddlquotes_SelectedIndexChanged">
</asp:DropDownList>
<br/> <br/>
<asp:Label ID="lblquotes" runat="server">
</asp:Label>
<br/> <br/>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="mylink">Link to:</asp:HyperLink>
</div>
</form>
</body>
</html>
コードビハインドファイル:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string[,] quotes =
{
{"Imagination is more important than Knowledge.", "Albert Einsten"},
{"Assume a virtue, if you have it not" "Shakespeare"},
{"A man cannot be comfortable without his own approval", "Mark Twain"},
{"Beware the young doctor and the old barber", "Benjamin Franklin"},
{"Whatever begun in anger ends in shame", "Benjamin Franklin"}
};
for (int i=0; i<quotes.GetLength(0); i++)
ddlquotes.Items.Add(new ListItem(quotes[i,0], quotes[i,1]));
}
}
protected void ddlquotes_SelectedIndexChanged(object sender, EventArgs e)
{
if (ddlquotes.SelectedIndex != -1)
{
lblquotes.Text = String.Format("{0}, Quote: {1}", ddlquotes.SelectedItem.Text, ddlquotes.SelectedValue);
}
}
}
トレース
ページレベルのトレースを有効にするには、次のようにPageディレクティブを変更し、Trace属性を追加する必要があります。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="errorhandling._Default" Trace ="true" %>
ファイルを実行すると、トレース情報が取得されます。
上部に次の情報が表示されます。
- セッションID
- 状態コード
- リクエストの時間
- リクエストの種類
- 要求と応答のエンコード
ページがリクエストされるたびにサーバーから送信されたステータスコードには、エラーの名前と時間が表示されます。 次の表に、一般的なHTTPステータスコードを示します。
数
説明
情報(100-199)
100
持続する
101
スイッチングプロトコル
成功(200-299)
200
OK
204
コンテンツなし
リダイレクト(300-399)
301
永久に移動しました
305
プロキシを使う
307
一時的なリダイレクト
クライアントエラー(400-499)
400
要求の形式が正しくありません
402
支払いが必要
404
見つかりません
408
リクエストタイムアウト
417
期待に失敗しました
サーバーエラー(500-599)
500
内部サーバーエラー
503
サービスは利用できません
505
HTTPバージョンはサポートされていません
トップレベルの情報の下には、ページのライフサイクルの詳細を提供するトレースログがあります。 ページが初期化されてからの経過時間を秒単位で提供します。
次のセクションはコントロールツリーで、ページ上のすべてのコントロールを階層的にリストします。
セッションおよびアプリケーション状態の概要、Cookie、およびヘッダーコレクションの最後に、すべてのサーバー変数のリストが続きます。
Traceオブジェクトを使用すると、トレース出力にカスタム情報を追加できます。 これを実現するには、WriteメソッドとWarnメソッドの2つのメソッドがあります。
Page_Loadイベントハンドラーを変更して、Writeメソッドを確認します。
protected void Page_Load(object sender, EventArgs e)
{
Trace.Write("Page Load");
if (!IsPostBack)
{
Trace.Write("Not Post Back, Page Load");
string[,] quotes =
.......................
}
}
実行して効果を観察します。
Warnメソッドを確認するには、選択したインデックス変更イベントハンドラーにエラーコードを強制的に入力します。
try
{
int a = 0;
int b = 9/a;
}catch (Exception e)
{
Trace.Warn("UserAction", "processing 9/a", e);
}
Try-CatchはC#プログラミング構造です。 tryブロックは、エラーを生成する可能性のあるコードまたは保持しないコードを保持し、catchブロックはエラーをキャッチします。 プログラムが実行されると、トレースログに警告が送信されます。
アプリケーションレベルのトレースは、Webサイトのすべてのページに適用されます。 web.configファイルに次のコード行を追加することで実装されます。
<system.web>
<trace enabled="true"/>
</system.web>
エラー処理
ASP.NETはすべての実行時エラーを検出できますが、まだいくつかの微妙なエラーが残っている可能性があります。 トレースによるエラーの観察は、ユーザーではなく開発者を対象としています。
したがって、このような発生をインターセプトするために、アプリケーションのweb.configファイルにエラー処理設定を追加できます。 アプリケーション全体のエラー処理です。 たとえば、web.configファイルに次の行を追加できます。
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage">
<error statusCode="403" redirect="NoAccess"/>
<error statusCode="404" redirect="FileNotFound"/>
</customErrors>
</system.web>
<configuration>
<customErrors>セクションには、可能な属性があります。
- モード:カスタムエラーページを有効または無効にします。 次の3つの値があります。
- オン:カスタムページを表示します。
- オフ:ASP.NETエラーページを表示します(イエローページ)
- remoteOnly :クライアントにカスタムエラーを表示し、ASP.NETエラーをローカルに表示します。
- defaultRedirect :未処理のエラーが発生した場合に表示されるページのURLが含まれます。
さまざまなタイプのエラーにさまざまなカスタムエラーページを配置するには、エラーのステータスコードに基づいてさまざまなエラーページを指定する<error>サブタグを使用します。
ページレベルのエラー処理を実装するには、Pageディレクティブを変更します。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="errorhandling._Default" Trace ="true" ErrorPage="PageError" %>
ASP.NETデバッグはそれ自体重要なテーマであるため、次の章で個別に説明します。