<customErrors>節點用于定義一些自定義錯誤信息的信息。此節點有Mode和defaultRedirect兩個屬性,其中defaultRedirect屬性是一個可選屬性,表示應用程序發生錯誤時重定向到的默認URL,如果沒有指定該屬性則顯示一般性錯誤。Mode屬性是一個必選屬性,它有三個可能值,它們所代表的意義分別如下:
Mode 說明
On 表示在本地和遠程用戶都會看到自定義錯誤信息。
Off 禁用自定義錯誤信息,本地和遠程用戶都會看到詳細的錯誤信息。
RemoteOnly 表示本地用戶將看到詳細錯誤信息,而遠程用戶將會看到自定義錯誤信息。
這里有必要說明一下本地用戶和遠程用戶的概念。當我們訪問asp.net應用程時所使用的機器和發布asp.net應用程序所使用的機器為同一臺機器時成為本地用戶,反之則稱之為遠程用戶。在開發調試階段為了便于查找錯誤Mode屬性建議設置為Off,而在部署階段應將Mode屬性設置為On或者RemoteOnly,以避免這些詳細的錯誤信息暴露了程序代碼細節從而引來黑客的入侵。
下面我們添加一個頁面CustomErrorsDemo.aspx,在它的Page_Load事件里拋出一個異常,代碼如下:


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class CustomErrorsDemo : System.Web.UI.Page
{
??? protected void Page_Load(object sender, EventArgs e)
??? {
??????? throw new Exception("故意拋出的異常。");
??? }
}
我們先配置<customErrors>如下:
<customErrors mode="RemoteOnly">
???? <error statusCode="403" redirect="NoAccess.htm" />
???? <error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
這時本地運行CustomErrorsDemo.aspx的效果如下:
?
遠程訪問時看到的效果:
?
如果我們將customErrors的Mode屬性設置為“On”本地運行和遠程訪問都會看到如下效果:
?
如果將customErrors的Mode屬性設置為“Off”本地運行和遠程訪問都會看到如下效果:
?
<error>子節點
在<customErrors>節點下還包含有<error>子節點,這個節點主要是根據服務器的HTTP錯誤狀態代碼而重定向到我們自定義的錯誤頁面,注意要使<error>子節點下的配置生效,必須將<customErrors>節點節點的Mode屬性設置為“On”。下面是一個例子:
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
???? <error statusCode="403" redirect="403.htm" />
???? <error statusCode="404" redirect="404.htm" />
</customErrors>

在上面的配置中如果用戶訪問的頁面不存在就會跳轉到404.htm頁面,如果用戶沒有權限訪問請求的頁面則會跳轉到403.htm頁面,403.htm和404.htm頁面都是我們自己添加的頁面,我們可以在頁面中給出友好的錯誤提示。