Asp.net-error-handling

提供:Dev Guides
移動先:案内検索

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バージョンはサポートされていません

トップレベルの情報の下には、ページのライフサイクルの詳細を提供するトレースログがあります。 ページが初期化されてからの経過時間を秒単位で提供します。

トレース情報2

次のセクションはコントロールツリーで、ページ上のすべてのコントロールを階層的にリストします。

トレース情報3

セッションおよびアプリケーション状態の概要、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 =
      .......................
   }
}

実行して効果を観察します。

トレース情報4

Warnメソッドを確認するには、選択したインデックス変更イベントハンドラーにエラーコードを強制的に入力します。

try
{
   int a = 0;
   int b = 9/a;
}catch (Exception e)
{
   Trace.Warn("UserAction", "processing 9/a", e);
}

Try-CatchはC#プログラミング構造です。 tryブロックは、エラーを生成する可能性のあるコードまたは保持しないコードを保持し、catchブロックはエラーをキャッチします。 プログラムが実行されると、トレースログに警告が送信されます。

トレース情報5

アプリケーションレベルのトレースは、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デバッグはそれ自体重要なテーマであるため、次の章で個別に説明します。