- ASP.NET 教程
- ASP.NET - 首頁
- ASP.NET - 簡介
- ASP.NET - 環境
- ASP.NET - 生命週期
- ASP.NET - 第一個示例
- ASP.NET - 事件處理
- ASP.NET - 伺服器端
- ASP.NET - 伺服器控制元件
- ASP.NET - HTML 伺服器控制元件
- ASP.NET - 客戶端
- ASP.NET - 基本控制元件
- ASP.NET - 指令
- ASP.NET - 狀態管理
- ASP.NET - 驗證器
- ASP.NET - 資料庫訪問
- ASP.NET - ADO.NET
- ASP.NET - 檔案上傳
- ASP.NET - 廣告輪播
- ASP.NET - 日曆控制元件
- ASP.NET - 多檢視
- ASP.NET - 面板控制元件
- ASP.NET - AJAX 控制元件
- ASP.NET - 資料來源
- ASP.NET - 資料繫結
- ASP.NET - 自定義控制元件
- ASP.NET - 個性化設定
- ASP.NET - 錯誤處理
- ASP.NET - 除錯
- ASP.NET - LINQ
- ASP.NET - 安全性
- ASP.NET - 資料快取
- ASP.NET - Web 服務
- ASP.NET - 多執行緒
- ASP.NET - 配置
- ASP.NET - 部署
- ASP.NET 資源
- ASP.NET - 快速指南
- ASP.NET - 有用資源
- ASP.NET - 討論
ASP.NET - 錯誤處理
ASP.NET 中的錯誤處理包含三個方面
跟蹤 - 在頁面級別或應用程式級別跟蹤程式執行。
錯誤處理 - 在頁面級別或應用程式級別處理標準錯誤或自定義錯誤。
除錯 - 單步執行程式,設定斷點以分析程式碼
本章將討論跟蹤和錯誤處理,下一章將討論除錯。
為了理解這些概念,請建立以下示例應用程式。它包含一個標籤控制元件、一個下拉列表和一個連結。下拉列表載入著名引言的陣列列表,並在下面的標籤中顯示選定的引言。它還有一個指向不存在的連結的超連結。
<%@ 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.htm">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 | 確定 |
| 204 | 無內容 |
| 重定向 (300 - 399) | |
| 301 | 永久移動 |
| 305 | 使用代理 |
| 307 | 臨時重定向 |
| 客戶端錯誤 (400 - 499) | |
| 400 | 錯誤請求 |
| 402 | 需要付款 |
| 404 | 未找到 |
| 408 | 請求超時 |
| 417 | 期望失敗 |
| 伺服器錯誤 (500 - 599) | |
| 500 | 內部伺服器錯誤 |
| 503 | 服務不可用 |
| 505 | 不支援的 HTTP 版本 |
在頂級資訊下,有一個跟蹤日誌,它提供了頁面生命週期的詳細資訊。它提供了自頁面初始化以來以秒為單位的經過時間。
下一部分是控制元件樹,它以分層方式列出頁面上的所有控制元件
最後是會話和應用程式狀態摘要、cookie 和標頭集合,然後是所有伺服器變數的列表。
Trace 物件允許您向跟蹤輸出新增自定義資訊。它有兩種方法可以實現這一點:Write 方法和 Warn 方法。
更改 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.config 檔案中放置以下程式碼行來實現的
<system.web> <trace enabled="true" /> </system.web>
錯誤處理
儘管 ASP.NET 可以檢測所有執行時錯誤,但仍然可能存在一些細微的錯誤。透過跟蹤觀察錯誤是針對開發人員的,而不是針對使用者的。
因此,為了攔截此類事件,您可以在應用程式的 web.config 檔案中新增錯誤處理設定。這是應用程式範圍的錯誤處理。例如,您可以在 web.config 檔案中新增以下幾行
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
</system.web>
<configuration>
`
Mode:它啟用或停用自定義錯誤頁面。它有三個可能的值:
- On:顯示自定義頁面。
- Off:顯示 ASP.NET 錯誤頁面(黃色頁面)
- remoteOnly:它向客戶端顯示自定義錯誤,在本地顯示 ASP.NET 錯誤。
defaultRedirect:它包含在發生未處理錯誤時要顯示的頁面的 URL。
要為不同型別的錯誤放置不同的自定義錯誤頁面,可以使用`
要實現頁面級錯誤處理,可以修改 Page 指令
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" Trace ="true" ErrorPage="PageError.htm" %>
因為 ASP.NET 除錯本身就是一個重要的主題,所以我們將在下一章單獨討論它。