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);
}
}
}
運行上面示例代碼,得到以下結果 -
跟蹤
要啓用頁面級別跟蹤,需要修改Page
指令並添加Trace
屬性,如下所示:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Trace ="true"%>
現在當執行這個文件時,就會得到以下跟蹤信息:
它在頂部提供以下信息:
- 會話ID
- 狀態碼
- 請求時間
- 請求類型
- 請求和響應編碼
每次請求頁面時,服務器發送的狀態碼顯示錯誤的名稱和時間(如果有的話)。 下表顯示了常見的HTTP狀態代碼:
狀態碼
描述
100
繼續
101
切換協議
200
完成
204
無內容
301
永久轉移
305
使用代理
307
臨時重定向
400
錯誤的請求
402
需要抵消
404
未找到
408
請求超時
417
未實現預期
500
內部服務器錯誤
503
服務不可用
505
HTTP版本不受支持
在頂級信息下面有Trace
日誌,提供頁面生命週期的細節。它提供自頁面初始化以來經過的時間(秒)。如下圖所示 -
下一個信息塊是控制樹,它以分層的方式列出頁面上的所有控件:
最後在會話和應用程序狀態摘要,Cookie和標題集合之後列出所有服務器變量。
跟蹤對象允許將自定義信息添加到跟蹤輸出。 它有兩個方法來完成這個操作:Write
方法和Warn
方法。
更改Page_Load
事件處理程序以使用Write
方法記錄程序執行過程:
Trace.Write("頁面已經開始加載...");
if (!IsPostBack)
{
Trace.Write("Not Post Back, Page Load");
......
運行觀察效果:
要使用Warn
方法,可在選擇的索引更改的事件處理程序中強制輸入一些錯誤的代碼:
// 強制拋出錯誤
try
{
int a = 0;
int b = 9 / a;
}catch (DivideByZeroException e1)
{
Trace.Warn("UserAction", "processing 9/a", e1);
}
Try-Catch
是一個C# 編程結構。 try
塊保存任何可能產生錯誤或者不產生錯誤的代碼,catch
塊捕獲錯誤。 程序運行時,會在跟蹤日誌中發送警告。
應用程序級別跟蹤適用於網站中的所有頁面。 它通過在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等技術