ASP.NET錯誤管理

ASP.NET中的錯誤處理有三個方面:

  • 跟蹤 - 在頁面級別或應用程序級別跟蹤程序執行。
  • 錯誤處理 - 處理頁面級別或應用程序級別的標準錯誤或自定義錯誤。
  • 調試 - 逐步完成程序,設置斷點來分析代碼。

在本章中,我們將討論跟蹤,錯誤處理以及調試。

要理解這些概念,創建一個ASP.Net空網站項目:ErrorHandling 。 它有一個標籤控件,一個下拉列表和一個鏈接。 下拉列表加載名人名言的數組列表,所選引用顯示在下面的標籤中。它也有超鏈接,但是指向一個不存在的鏈接(僅作爲示例演示)。參考以下代碼(Default.aspx) -

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>ASP.Net錯誤處理示例</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label ID="lblheading" runat="server" Text="跟蹤,調試和錯誤處理">
            </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.html">鏈接到:</asp:HyperLink>
         </div>
    </form>
</body>
</html>

以下是Default.aspx.cs 的代碼 -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

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("{1}, 名言: {0}", ddlquotes.SelectedItem.Text, ddlquotes.SelectedValue);
        }
    }
}

運行上面示例代碼,得到以下結果 -

ASP.NET錯誤管理

跟蹤

要啓用頁面級別跟蹤,需要修改Page指令並添加Trace屬性,如下所示:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Trace ="true"%>

現在當執行這個文件時,就會得到以下跟蹤信息:

ASP.NET錯誤管理

它在頂部提供以下信息:

  • 會話ID
  • 狀態碼
  • 請求時間
  • 請求類型
  • 請求和響應編碼

每次請求頁面時,服務器發送的狀態碼顯示錯誤的名稱和時間(如果有的話)。 下表顯示了常見的HTTP狀態代碼:

狀態碼

描述

100

繼續

101

切換協議

200

完成

204

無內容

301

永久轉移

305

使用代理

307

臨時重定向

400

錯誤的請求

402

需要抵消

404

未找到

408

請求超時

417

未實現預期

500

內部服務器錯誤

503

服務不可用

505

HTTP版本不受支持

在頂級信息下面有Trace日誌,提供頁面生命週期的細節。它提供自頁面初始化以來經過的時間(秒)。如下圖所示 -
ASP.NET錯誤管理

下一個信息塊是控制樹,它以分層的方式列出頁面上的所有控件:

ASP.NET錯誤管理

最後在會話和應用程序狀態摘要,Cookie和標題集合之後列出所有服務器變量。

跟蹤對象允許將自定義信息添加到跟蹤輸出。 它有兩個方法來完成這個操作:Write方法和Warn方法。

更改Page_Load事件處理程序以使用Write方法記錄程序執行過程:

Trace.Write("頁面已經開始加載...");
        if (!IsPostBack)
        {
            Trace.Write("Not Post Back, Page Load");
            ......

運行觀察效果:

ASP.NET錯誤管理

要使用Warn方法,可在選擇的索引更改的事件處理程序中強制輸入一些錯誤的代碼:

        // 強制拋出錯誤
        try
        {
            int a = 0;
            int b = 9 / a;
        }catch (DivideByZeroException e1)
        {
            Trace.Warn("UserAction", "processing 9/a", e1);
        }

Try-Catch是一個C# 編程結構。 try塊保存任何可能產生錯誤或者不產生錯誤的代碼,catch塊捕獲錯誤。 程序運行時,會在跟蹤日誌中發送警告。

ASP.NET錯誤管理

應用程序級別跟蹤適用於網站中的所有頁面。 它通過在web.config文件中放入以下代碼行來實現:

<system.web>
   <trace enabled="true" />
</system.web>

錯誤處理

雖然ASP.NET可以檢測到所有的運行時錯誤,但仍然有一些細微的錯誤。 通過跟蹤觀察錯誤是爲了方便開發人員發現程序問題,而不是爲了用戶。
因此,爲了截獲這種情況,可以在應用程序的web.config文件中添加錯誤處理設置。 這是應用程序範圍的錯誤處理。 例如,可以在web.config文件中添加以下行:

<configuration>
   <system.web>

      <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.html">
         <error statusCode="403" redirect="NoAccess.html"    />
         <error statusCode="404" redirect="FileNotFound.html" />
      </customErrors>

   </system.web>
<configuration>

<customErrors>部分可能有的屬性:

  • Mode - 它啓用或禁用自定義錯誤頁面。它有三個可能的值:
    • On - 顯示自定義頁面。
    • Off - 顯示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.html" %>

由於ASP.NET調試本身是一個重要的主題,因此在接下來的教程中,將在單獨一篇文章討論它。

易百教程移動端:請掃描本頁面底部(右側)二維碼並關注微信公衆號,回覆:"教程" 選擇相關教程閱讀或直接訪問:http://m.yiibai.com

上一篇:ASP.NET個性化 下一篇:ASP.NET調試

加QQ羣啦,易百教程官方技術學習羣

QQ羣名稱

羣號

人數

免費

等級

羣介紹

JAVA技術

227270512

2000

LV5

Java基礎,JSP(Servlet),JAVA框架,Java高併發架構,Maven等等

MySQL/SQL

418407075

2000

LV5

SQL基礎,MySQL基礎,MySQL存儲過程,視圖,觸發器等等

大數據開發

655154550

2000

LV5

Spark,zookeeper,kafka,CDH,hive,fulme,hbase等Hadoop雲計算生態圈技術

Python技術

287904175

2000

LV5

Python編程,Python Web,Python大數據,Python爬蟲,自然語言處理等

Linux技術

479429477

2000

LV1

Redhat/Centos,Ubuntu,Shell,運維,監控等技術

PHP/Web開發者

460153241

1000

LV0

PHP基礎,PHP高級,網站優化/架構,JS,HTML,JQuery,前端等Web開發技術

人工智能

456236082

1000

LV0

人工智能,深度學習,算法等技術

Oracle數據庫

175248146

1000

LV0

SQL基礎,Oracle基礎,Oracle存儲過程,視圖,觸發器等等

Android開發

159629185

1000

LV0

Android開發,Android Studio,Kotlin,Dagger等技術

微軟技術

579821706

1000

LV0

C#,ASP.Net,VB.Net,ADO.Net,SQL Server,VBA,Excel等技術