W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在 ASP.NET 中異常處理有三個方面:
在這一章中,我們將討論 tracing 和 handling。并且在這一章中,我們將涉及 debugging。
為了理解概念,創(chuàng)建以下的樣本應(yīng)用程序。它有一個 label 控件,一個 dropdown 列表和一個鏈接。dropdown 列表加載了一個名言的 array 列表并且被選擇的引用將顯示在下面的標(biāo)簽中。它也擁有一個超鏈接,它指向一個不存在的鏈接。
<%@ 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" %>
現(xiàn)在當(dāng)你執(zhí)行文件時,你將得到追蹤信息:
它在首部提供了以下的信息:
每次頁面被需要時,從服務(wù)器發(fā)出的 status 代碼顯示名字和錯誤時間,如果有的話。以下的表格顯示普通的 HTTP status 代碼:
數(shù)字 | 描述 |
---|---|
通知(100 - 199) | |
100 | 繼續(xù) |
101 | 轉(zhuǎn)換協(xié)議 |
成功(200 - 299) | |
200 | OK |
204 | 無內(nèi)容 |
重定向(300 - 399) | |
301 | 永久移動 |
305 | 使用代理 |
307 | 暫時重定向 |
來自客戶端的錯誤(400 - 499) | |
400 | 錯誤請求 |
402 | 支付需求 |
404 | 未找到 |
408 | 請求超時 |
417 | 期望失敗 |
來自服務(wù)器的錯誤(500 - 599) | |
500 | 內(nèi)部服務(wù)器錯誤 |
503 | 服務(wù)不可用 |
505 | HTTP 版本不支持 |
在頂級信息下,有一個 Trace 日志,它提供了頁面生命周期的細節(jié)。它提供了頁面被初始化后的以秒為單位的運行時間。
下一個部分是控件樹,它以分層的形式列舉了頁面上所有的控件:
Session 和 Application 中的最后聲明了跟隨了所有服務(wù)器變量的 summaries,cookies 和 headers 集合。
Trace 對象允許你給 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 方法,讓我們在被選擇的 index changed 事件句柄中強制輸入一些錯誤的代碼:
try
{
int a = 0;
int b = 9 / a;
}catch (Exception e)
{
Trace.Warn("UserAction", "processing 9/a", e);
}
Try-Catch 是一個 C# 編程結(jié)構(gòu)。try 塊持有任何可以或不可以產(chǎn)生錯誤的代碼,catch 塊捕獲了錯誤。當(dāng)程序運行時,它在 trace 日志中發(fā)送警告。
應(yīng)用程序?qū)哟蔚淖粉檻?yīng)用到網(wǎng)站中的所有的頁面。它通過將以下代碼放入 web.config 文件被實現(xiàn):
<system.web>
<trace enabled="true" />
</system.web>
盡管 ASP.NET 能檢測所有的運行時錯誤,仍然有一些微小的錯誤仍在那兒。通過追蹤觀察錯誤是為開發(fā)者準備的,而不是用戶。
因此,為了攔截這樣情況的發(fā)生,你可以在應(yīng)用程序的 web.config 中添加錯誤解決設(shè)置。它是應(yīng)用程序范圍的錯誤解決。例如,你可以在 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 來展示以備不能解決的錯誤。 為了給不同錯誤類型放置不同的自定義錯誤頁面,子標(biāo)簽被使用,那里不同的錯誤頁面基于錯誤的 status 代碼被指定。 為了實現(xiàn)頁面級別的錯誤解決,Page 指令能被修改為: `````` 因為 ASP.NET Debugging 是它內(nèi)部一個重要的主題,因此我們將在下一章單獨地討論它。Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: