1. 程式人生 > >asp.net自定義錯誤頁面

asp.net自定義錯誤頁面

未處理 範圍 user height you 調用 accept tom 頁眉

  ASP.NET 提供三種用於在出現錯誤時捕獲和響應錯誤的主要方法:Page_Error 事件、Application_Error 事件以及應用程序配置文件 (Web.config)。

  如果您不調用 Server.ClearError 或者捕獲 Page_Error 或 Application_Error 事件中的錯誤,則將根據 Web.config 文件的 <customErrors> 部分中的設置處理錯誤。在 <customErrors> 部分,可將重定向頁指定為默認的錯誤頁 (defaultRedirect) 或者根據引發的 HTTP 錯誤代碼指定特定頁。您可使用此方法自定義用戶收到的錯誤信息。
  盡管您可在 <customErrors> 部分中 defaultRedirect 屬性的值中引用默認的錯誤頁,但是您還可根據引發的 HTTP 錯誤代碼指定要重定向到的特定頁。<error> 子元素允許使用此選項
<customErrors mode="On" defaultRedirect="ApplicationErroy.aspx">
<error statusCode="403" redirect="403.htm"/>
<error statusCode="404" redirect="404.htm"/>
<error statusCode="500" redirect="500.htm"/>
</customErrors>

asp.net自定義錯誤處理頁面方法一:

1、添加Web.config, <system.web></system.web>中添加<customErrors mode="On" defaultRedirect="ApplicationErroy.aspx" ></customErrors>節點,

2、添加錯誤處理頁面:ApplicationErroy.aspx調用下面的方法:
private void DealErroy()
{
HttpException erroy = new HttpException();
string strCode = erroy.ErrorCode.ToString();
string strMsg = erroy.Message;
erroy.HelpLink = "sss";
Response.Write("ErrorCode:" + strCode + "<br>");
Response.Write("Message:" + strMsg + "<br>");
Response.Write("HelpLink:" + erroy.HelpLink + "<br>");
Response.Write("Source:" + erroy.Source + "<br>");
Response.Write("TargetSite:" + erroy.TargetSite + "<br>");
Response.Write("InnerException:" + erroy.InnerException + "<br>");
Response.Write("StackTrace:" + erroy.StackTrace + "<br>");
Response.Write("GetHtmlErrorMessage:" + erroy.GetHtmlErrorMessage() + "<br>");
Response.Write("erroy.GetHttpCode().ToString():" + erroy.GetHttpCode().ToString() +"<br>");

Response.Write("erroy.Data.ToString()::" + erroy.Data.ToString() + "<br>");
}
這種方法不能完整地顯示錯誤信息;

asp.net自定義錯誤處理頁面方法二:

1、添加Web.config, < system.web>< /system.web>中添加< customErrors mode="On"

defaultRedirect="ApplicationErroy.aspx" >< /customErrors>節點,

2、添加Global.asax文件,找到Application_Error事件,加入以下代碼:

//這是添加了一個全局應用程序類 在Application_Error事件中處理錯誤頁面 和web.config沒有關系 即使沒有web.config也是可以定位到錯誤頁面

void Application_Error(object sender, EventArgs e)

{

//在出現未處理的錯誤時運行的代碼

Exception erroy = Server.GetLastError();

string err = "出錯頁面是:" + Request.Url.ToString() + "</br>";

err += "異常信息:" + erroy.Message + "</br>";

err += "Source:" + erroy.Source + "</br>";

err += "StackTrace:" + erroy.StackTrace + "</br>";

//清除前一個異常

Server.ClearError();

//此處理用Session["ProError"]出錯。所以用 Application["ProError"]

Application["erroy"] = err;

//此處不是page中,不能用Response.Redirect("../frmSysError.aspx");

System.Web.HttpContext.Current.Response.Redirect(HttpContext.Current.Request.ApplicationPath +"/ApplicationErroy.aspx");

}

2、添加錯誤處理頁面:ApplicationErroy.aspx 加入以下代碼;

protected void Page_Load(object sender, EventArgs e)

{

//顯示程序中的錯誤碼

if (!IsPostBack)

{

//顯示程序中的錯誤碼

if (Application["erroy"] != null)

{

Response.Write(Application["erroy"].ToString());

}

}

}

這種方法能完整地顯示錯誤信息,

最好的辦法還是兩種方法一起用最好!

另:web.config中也可以把

<customErrors mode="On" defaultRedirect="ApplicationErroy.aspx">
<error statusCode="403" redirect="403.htm"/>
<error statusCode="404" redirect="404.htm"/>
<error statusCode="500" redirect="500.htm"/>
</customErrors>

添加進去。

http錯誤代碼含義:
"100" : Continue
"101" : witching Protocols
"200" : OK
"201" : Created
"202" : Accepted
"203" : Non-Authoritative Information
"204" : No Content
"205" : Reset Content
"206" : Partial Content
"300" : Multiple Choices
"301" : Moved Permanently
"302" : Found
"303" : See Other
"304" : Not Modified
"305" : Use Proxy
"307" : Temporary Redirect
"400" : Bad Request
"401" : Unauthorized
"402" : Payment Required
"403" : Forbidden
"404" : Not Found
"405" : Method Not Allowed
"406" : Not Acceptable
"407" : Proxy Authentication Required
"408" : Request Time-out
"409" : Conflict
"410" : Gone
"411" : Length Required
"412" : Precondition Failed
"413" : Request Entity Too Large
"414" : Request-URI Too Large
"415" : Unsupported Media Type
"416" : Requested range not satisfiable
"417" : Expectation Failed
"500" : Internal Server Error
"501" : Not Implemented
"502" : Bad Gateway
"503" : Service Unavailable
"504" : Gateway Time-out
"505" : HTTP Version not supported

HTTP 400 - 請求無效
HTTP 401.1 - 未授權:登錄失敗
HTTP 401.2 - 未授權:服務器配置問題導致登錄失敗
HTTP 401.3 - ACL 禁止訪問資源
HTTP 401.4 - 未授權:授權被篩選器拒絕
HTTP 401.5 - 未授權:ISAPI 或 CGI 授權失敗

HTTP 403 - 禁止訪問
HTTP 403 - 對 Internet 服務管理器 (HTML) 的訪問僅限於 Localhost
HTTP 403.1 禁止訪問:禁止可執行訪問
HTTP 403.2 - 禁止訪問:禁止讀訪問
HTTP 403.3 - 禁止訪問:禁止寫訪問
HTTP 403.4 - 禁止訪問:要求 SSL
HTTP 403.5 - 禁止訪問:要求 SSL 128
HTTP 403.6 - 禁止訪問:IP 地址被拒絕
HTTP 403.7 - 禁止訪問:要求客戶證書
HTTP 403.8 - 禁止訪問:禁止站點訪問
HTTP 403.9 - 禁止訪問:連接的用戶過多
HTTP 403.10 - 禁止訪問:配置無效
HTTP 403.11 - 禁止訪問:密碼更改
HTTP 403.12 - 禁止訪問:映射器拒絕訪問
HTTP 403.13 - 禁止訪問:客戶證書已被吊銷
HTTP 403.15 - 禁止訪問:客戶訪問許可過多
HTTP 403.16 - 禁止訪問:客戶證書不可信或者無效
HTTP 403.17 - 禁止訪問:客戶證書已經到期或者尚未生效
HTTP 404.1 - 無法找到 Web 站點
HTTP 404 - 無法找到文件
HTTP 405 - 資源被禁止
HTTP 406 - 無法接受
HTTP 407 - 要求代理身份驗證
HTTP 410 - 永遠不可用
HTTP 412 - 先決條件失敗
HTTP 414 - 請求 - URI 太長
HTTP 500 - 內部服務器錯誤
HTTP 500.100 - 內部服務器錯誤 - ASP 錯誤
HTTP 500-11 服務器關閉
HTTP 500-12 應用程序重新啟動
HTTP 500-13 - 服務器太忙
HTTP 500-14 - 應用程序無效
HTTP 500-15 - 不允許請求 global.asa
Error 501 - 未實現
HTTP 502 - 網關錯誤

概要
當用戶試圖通過 HTTP 或文件傳輸協議 (FTP) 訪問一臺正在運行 Internet 信息服務 (IIS) 的服務器上的內容時,IIS 返回一個表示該請求的狀態的數字代碼。該狀態代碼記錄在 IIS 日誌中,同時也可能在 Web 瀏覽器或 FTP 客戶端顯示。狀態代碼可以指明具體請求是否已成功,還可以揭示請求失敗的確切原因。
更多信息
日誌文件的位置
在默認狀態下,IIS 把它的日誌文件放在 %WINDIR\System32\Logfiles 文件夾中。每個萬維網 (WWW) 站點和 FTP 站點在該目錄下都有一個單獨的目錄。在默認狀態下,每天都會在這些目錄下創建日誌文件,並用日期給日誌文件命名(例如,exYYMMDD.log)。
HTTP
1xx - 信息提示

這些狀態代碼表示臨時的響應。客戶端在收到常規響應之前,應準備接收一個或多個 1xx 響應。 100 - 繼續。
101 - 切換協議。
2xx - 成功

這類狀態代碼表明服務器成功地接受了客戶端請求。 200 - 確定。客戶端請求已成功。
201 - 已創建。
202 - 已接受。
203 - 非權威性信息。
204 - 無內容。
205 - 重置內容。
206 - 部分內容。
3xx - 重定向

客戶端瀏覽器必須采取更多操作來實現請求。例如,瀏覽器可能不得不請求服務器上的不同的頁面,或通過代理服務器重復該請求。 302 - 對象已移動。
304 - 未修改。
307 - 臨時重定向。
4xx - 客戶端錯誤

發生錯誤,客戶端似乎有問題。例如,客戶端請求不存在的頁面,客戶端未提供有效的身份驗證信息。
400 - 錯誤的請求。
401 - 訪問被拒絕。IIS 定義了許多不同的 401 錯誤,它們指明更為具體的錯誤原因。這些具體的錯誤代碼在瀏覽器中顯示,但不在 IIS 日誌中顯示: 401.1 - 登錄失敗。
401.2 - 服務器配置導致登錄失敗。
401.3 - 由於 ACL 對資源的限制而未獲得授權。
401.4 - 篩選器授權失敗。
401.5 - ISAPI/CGI 應用程序授權失敗。
401.7 – 訪問被 Web 服務器上的 URL 授權策略拒絕。這個錯誤代碼為 IIS 6.0 所專用。

403 - 禁止訪問:IIS 定義了許多不同的 403 錯誤,它們指明更為具體的錯誤原因: 403.1 - 執行訪問被禁止。
403.2 - 讀訪問被禁止。
403.3 - 寫訪問被禁止。
403.4 - 要求 SSL。
403.5 - 要求 SSL 128。
403.6 - IP 地址被拒絕。
403.7 - 要求客戶端證書。
403.8 - 站點訪問被拒絕。
403.9 - 用戶數過多。
403.10 - 配置無效。
403.11 - 密碼更改。
403.12 - 拒絕訪問映射表。
403.13 - 客戶端證書被吊銷。
403.14 - 拒絕目錄列表。
403.15 - 超出客戶端訪問許可。
403.16 - 客戶端證書不受信任或無效。
403.17 - 客戶端證書已過期或尚未生效。
403.18 - 在當前的應用程序池中不能執行所請求的 URL。這個錯誤代碼為 IIS 6.0 所專用。
403.19 - 不能為這個應用程序池中的客戶端執行 CGI。這個錯誤代碼為 IIS 6.0 所專用。
403.20 - Passport 登錄失敗。這個錯誤代碼為 IIS 6.0 所專用。

404 - 未找到。 404.0 -(無) – 沒有找到文件或目錄。
404.1 - 無法在所請求的端口上訪問 Web 站點。
404.2 - Web 服務擴展鎖定策略阻止本請求。
404.3 - MIME 映射策略阻止本請求。

405 - 用來訪問本頁面的 HTTP 謂詞不被允許(方法不被允許)
406 - 客戶端瀏覽器不接受所請求頁面的 MIME 類型。
407 - 要求進行代理身份驗證。
412 - 前提條件失敗。
413 – 請求實體太大。
414 - 請求 URI 太長。
415 – 不支持的媒體類型。
416 – 所請求的範圍無法滿足。
417 – 執行失敗。
423 – 鎖定的錯誤。
5xx - 服務器錯誤

服務器由於遇到錯誤而不能完成該請求。 500 - 內部服務器錯誤。 500.12 - 應用程序正忙於在 Web 服務器上重新啟動。
500.13 - Web 服務器太忙。
500.15 - 不允許直接請求 Global.asa。
500.16 – UNC 授權憑據不正確。這個錯誤代碼為 IIS 6.0 所專用。
500.18 – URL 授權存儲不能打開。這個錯誤代碼為 IIS 6.0 所專用。
500.100 - 內部 ASP 錯誤。

501 - 頁眉值指定了未實現的配置。
502 - Web 服務器用作網關或代理服務器時收到了無效響應。 502.1 - CGI 應用程序超時。
502.2 - CGI 應用程序出錯。application.

503 - 服務不可用。這個錯誤代碼為 IIS 6.0 所專用。
504 - 網關超時。
505 - HTTP 版本不受支持。

常見的 HTTP 狀態代碼及其原因
200 - 成功。 此狀態代碼表示 IIS 已成功處理請求。
304 - 未修改。 客戶端請求的文檔已在其緩存中,文檔自緩存以來尚未被修改過。客戶端使用文檔的緩存副本,而不從服務器下載文檔。
401.1 - 登錄失敗。 登錄嘗試不成功,可能因為用戶名或密碼無效。
401.3 - 由於 ACL 對資源的限制而未獲得授權。 這表示存在 NTFS 權限問題。即使您對試圖訪問的文件具備相應的權限,也可能發生此錯誤。例如,如果 IUSR 帳戶無權訪問 C:\Winnt\System32\Inetsrv 目錄,您會看到這個錯誤。 有關如何解決此問題的其他信息,請單擊下面的文章編號,查看 Microsoft 知識庫中相應的文章:
187506 INFO: IIS 4.0 的基礎 NTFS 權限
403.1 - 執行訪問被禁止。 下面是導致此錯誤信息的兩個常見原因: 您沒有足夠的執行許可。例如,如果試圖訪問的 ASP 頁所在的目錄權限設為“無”,或者,試圖執行的 CGI 腳本所在的目錄權限為“只允許腳本”,將出現此錯誤信息。若要修改執行權限,請在 Microsoft 管理控制臺 (MMC) 中右擊目錄,然後依次單擊屬性和目錄選項卡,確保為試圖訪問的內容設置適當的執行權限。
您沒有將試圖執行的文件類型的腳本映射設置為識別所使用的謂詞(例如,GET 或 POST)。若要驗證這一點,請在 MMC 中右擊目錄,依次單擊屬性、目錄選項卡和配置,然後驗證相應文件類型的腳本映射是否設置為允許所使用的謂詞。

403.2 - 讀訪問被禁止。驗證是否已將 IIS 設置為允許對目錄進行讀訪問。另外,如果您正在使用默認文件,請驗證該文件是否存在。 有關如何解決此問題的其他信息,請單擊下面的文章編號,查看 Microsoft 知識庫中相應的文章:
247677 錯誤信息:403.2 Forbidden:Read Access Forbidden(403.2 禁止訪問:讀訪問被禁止)
403.3 - 寫訪問被禁止。 驗證 IIS 權限和 NTFS 權限是否已設置以便向該目錄授予寫訪問權。有關如何解決此問題的其他信息,請單擊下面的文章編號,查看 Microsoft 知識庫中相應的文章:
248072 錯誤信息:403.3 Forbidden:Write Access Forbidden(403.3 禁止訪問:寫訪問被禁止)
403.4 - 要求 SSL。禁用要求安全通道選項,或使用 HTTPS 代替 HTTP 來訪問該頁面。如果沒有安裝證書的 Web 站點出現此錯誤,請單擊下面的文章編號,查看 Microsoft 知識庫中相應的文章:
224389 錯誤信息:HTTP 錯誤 403、403.4、403.5 禁止訪問:要求 SSL
403.5 - 要求 SSL 128。禁用要求 128 位加密選項,或使用支持 128 位加密的瀏覽器以查看該頁面。如果沒有安裝證書的 Web 站點出現此錯誤,請單擊下面的文章編號,查看 Microsoft 知識庫中相應的文章:
224389 錯誤信息:HTTP 錯誤 403、403.4、403.5 禁止訪問:要求 SSL
403.6 - IP 地址被拒絕。您已把您的服務器配置為拒絕訪問您目前的 IP 地址。 有關如何解決此問題的其他信息,請單擊下面的文章編號,查看 Microsoft 知識庫中相應的文章:
248043 錯誤信息:403.6 - Forbidden:IP Address Rejected(403.6 - 不可用:IP 地址被拒絕)
403.7 - 要求客戶端證書。您已把您的服務器配置為要求客戶端身份驗證證書,但您未安裝有效的客戶端證書。 有關其他信息,請單擊下面的文章編號,查看 Microsoft 知識庫中相應的文章:
190004 錯誤 403.7 或“Connection to Server Could Not Be Established”(無法建立與服務器的連接)
186812 PRB:錯誤信息:403.7 Forbidden:Client Certificate Required(403.7 禁止訪問:要求客戶端證書)
403.8 - 站點訪問被拒絕。您已為您用來訪問服務器的域設置了域名限制。有關如何解決此問題的其他信息,請單擊下面的文章編號,查看 Microsoft 知識庫中相應的文章:
248032 錯誤信息:Forbidden:Site Access Denied 403.8(禁止訪問:站點訪問被拒絕 403.8)
403.9 - 用戶數過多。與該服務器連接的用戶數量超過了您設置的連接限制。 有關如何更改此限制的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
248074 錯誤信息:Access Forbidden:Too Many Users Are Connected 403.9(禁止訪問:連接的用戶太多 403.9)
註意:Microsoft Windows 2000 Professional 和 Microsoft Windows XP Professional 自動設置了在 IIS 上最多 10 個連接的限制。您無法更改此限制。
403.12 - 拒絕訪問映射表。 您要訪問的頁面要求提供客戶端證書,但映射到您的客戶端證書的用戶 ID 已被拒絕訪問該文件。 有關其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
248075 錯誤信息:HTTP 403.12 - Access Forbidden:Mapper Denied Access(HTTP 403.12 - 禁止訪問:映射表拒絕訪問)
404 - 未找到。 發生此錯誤的原因是您試圖訪問的文件已被移走或刪除。如果在安裝 URLScan 工具之後,試圖訪問帶有有限擴展名的文件,也會發生此錯誤。這種情況下,該請求的日誌文件項中將出現“Rejected by URLScan”的字樣。
500 - 內部服務器錯誤。 很多服務器端的錯誤都可能導致該錯誤信息。事件查看器日誌包含更詳細的錯誤原因。此外,您可以禁用友好 HTTP 錯誤信息以便收到詳細的錯誤說明。 有關如何禁用友好 HTTP 錯誤信息的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
294807 如何在服務器端禁用 Internet Explorer 5 的“顯示友好 HTTP 錯誤信息”功能
500.12 - 應用程序正在重新啟動。 這表示您在 IIS 重新啟動應用程序的過程中試圖加載 ASP 頁。刷新頁面後,此信息即會消失。如果刷新頁面後,此信息再次出現,可能是防病毒軟件正在掃描 Global.asa 文件。 有關其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
248013 錯誤信息:HTTP Error 500-12 Application Restarting(HTTP 錯誤 500-12 應用程序正在重新啟動)
500-100.ASP - ASP 錯誤。 如果試圖加載的 ASP 頁中含有錯誤代碼,將出現此錯誤信息。若要獲得更確切的錯誤信息,請禁用友好 HTTP 錯誤信息。默認情況下,只會在默認 Web 站點上啟用此錯誤信息。有關如何在非默認的 Web 站點上看到此錯誤信息的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
261200 顯示 HTTP 500 錯誤信息,而不顯示 500-100.asp 的 ASP 錯誤信息
502 - 網關錯誤。 如果試圖運行的 CGI 腳本不返回有效的 HTTP 標頭集,將出現此錯誤信息。

FTP
1xx - 肯定的初步答復

這些狀態代碼指示一項操作已經成功開始,但客戶端希望在繼續操作新命令前得到另一個答復。 110 重新啟動標記答復。
120 服務已就緒,在 nnn 分鐘後開始。
125 數據連接已打開,正在開始傳輸。
150 文件狀態正常,準備打開數據連接。
2xx - 肯定的完成答復

一項操作已經成功完成。客戶端可以執行新命令。 200 命令確定。
202 未執行命令,站點上的命令過多。
211 系統狀態,或系統幫助答復。
212 目錄狀態。
213 文件狀態。
214 幫助消息。
215 NAME 系統類型,其中,NAME 是 Assigned Numbers 文檔中所列的正式系統名稱。
220 服務就緒,可以執行新用戶的請求。
221 服務關閉控制連接。如果適當,請註銷。
225 數據連接打開,沒有進行中的傳輸。
226 關閉數據連接。請求的文件操作已成功(例如,傳輸文件或放棄文件)。
227 進入被動模式 (h1,h2,h3,h4,p1,p2)。
230 用戶已登錄,繼續進行。
250 請求的文件操作正確,已完成。
257 已創建“PATHNAME”。
3xx - 肯定的中間答復

該命令已成功,但服務器需要更多來自客戶端的信息以完成對請求的處理。 331 用戶名正確,需要密碼。
332 需要登錄帳戶。
350 請求的文件操作正在等待進一步的信息。
4xx - 瞬態否定的完成答復

該命令不成功,但錯誤是暫時的。如果客戶端重試命令,可能會執行成功。 421 服務不可用,正在關閉控制連接。如果服務確定它必須關閉,將向任何命令發送這一應答。
425 無法打開數據連接。
426 Connection closed; transfer aborted.
450 未執行請求的文件操作。文件不可用(例如,文件繁忙)。
451 請求的操作異常終止:正在處理本地錯誤。
452 未執行請求的操作。系統存儲空間不夠。
5xx - 永久性否定的完成答復

該命令不成功,錯誤是永久性的。如果客戶端重試命令,將再次出現同樣的錯誤。
500 語法錯誤,命令無法識別。這可能包括諸如命令行太長之類的錯誤。
501 在參數中有語法錯誤。
502 未執行命令。
503 錯誤的命令序列。
504 未執行該參數的命令。
530 未登錄。
532 存儲文件需要帳戶。
550 未執行請求的操作。文件不可用(例如,未找到文件,沒有訪問權限)。
551 請求的操作異常終止:未知的頁面類型。
552 請求的文件操作異常終止:超出存儲分配(對於當前目錄或數據集)。
553 未執行請求的操作。不允許的文件名。

常見的 FTP 狀態代碼及其原因
150 - FTP 使用兩個端口:21 用於發送命令,20 用於發送數據。狀態代碼 150 表示服務器準備在端口 20 上打開新連接,發送一些數據。
226 - 命令在端口 20 上打開數據連接以執行操作,如傳輸文件。該操作成功完成,數據連接已關閉。
230 - 客戶端發送正確的密碼後,顯示該狀態代碼。它表示用戶已成功登錄。
331 - 客戶端發送用戶名後,顯示該狀態代碼。無論所提供的用戶名是否為系統中的有效帳戶,都將顯示該狀態代碼。
426 - 命令打開數據連接以執行操作,但該操作已被取消,數據連接已關閉。
530 - 該狀態代碼表示用戶無法登錄,因為用戶名和密碼組合無效。如果使用某個用戶帳戶登錄,可能鍵入錯誤的用戶名或密碼,也可能選擇只允許匿名訪問。如果使用匿名帳戶登錄,IIS 的配置可能拒絕匿名訪問。
550 - 命令未被執行,因為指定的文件不可用。例如,要 GET 的文件並不存在,或試圖將文件 PUT 到您沒有寫入權限的目錄。

asp.net自定義錯誤處理頁面方法三Page_Error事件:

  Page_Error 事件提供一種捕獲在頁級別出現的錯誤的方法。您可以只是顯示錯誤信息(正如下面的示例代碼所示),也可以記錄事件或執行某個其他操作。
備註:此示例在瀏覽器中顯示詳細的錯誤信息,提供此示例只是為了進行說明。向應用程序的最終用戶顯示詳細信息(尤其是該應用程序在 Internet 上運行時)一定要小心。更適當的做法是向用戶顯示一條消息,告知已發生錯誤,然後將具體的錯誤詳細信息記錄在事件日誌中。
  本示例引發一個強迫錯誤發生在 Page_Load 事件中的空異常。按照以下步驟可創建將測試 Page_Error 事件的初始頁。 1. 按照以下步驟將名為 PageEvent.aspx 的新文件添加到項目中: a. 打開 Microsoft Visual Studio .NET。
b. 在"解決方案資源管理器"中,右鍵單擊該項目節點,指向添加,然後單擊添加 Web 窗體。
c. 在名稱文本框中,鍵入 PageEvent.aspx,然後單擊打開。

將以下代碼添加到 PageEvent.aspx 中:
<script language=C# runat="server">
void Page_Load(object sender, System.EventArgs e)
{
throw(new ArgumentNullException());
}

public void Page_Error(object sender,EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "<b>Error Caught in Page_Error event</b><hr><br>" +
"<br><b>Error in:</b>" + Request.Url.ToString() +
"<br><b>Error Message:</b>" + objErr.Message.ToString()+
"<br><b>Stack Trace:</b><br>" +
objErr.StackTrace.ToString();
Response.Write(err.ToString());
Server.ClearError();
}
</script>

從文件菜單中,單擊保存 PageEvent.aspx。
右鍵單擊該頁,然後單擊在瀏覽器中查看以運行該頁。請註意,將按照代碼規範引發和報告錯誤。
備註:您可能註意到代碼發出對 Server.ClearError 的調用。這將防止錯誤繼續到要被處理的 Application_Error 事件中。

此外,您還應記下 @ Page 指令中的 Inherits 屬性。如果已經設置 Inherits,則必須首先生成項目,然後再瀏覽到該頁。如果不首先生成項目,將看到下面的錯誤信息: ‘Project.PageEvent‘ is not a valid type

(轉)

ASP.NET 在處理和響應錯誤的方式上進行了若幹改進。在傳統的 ASP 中,是用"On Error Resume Next"(或在 Jscript 中用 try-catch 塊)處理錯誤的。或者,如果您運行的是 Microsoft Internet Information Services (IIS) 5.0,則使用 ASPError 對象創建自定義的錯誤報告頁。然而,這些方法都有其局限性。

ASP.NET 提供了在運行 ASP.NET 應用程序時可能出現的錯誤的若幹處理和響應級別。ASP.NET 提供三種用於在出現錯誤時捕獲和響應錯誤的主要方法:Page_Error 事件、Application_Error 事件以及應用程序配置文件 (Web.config)。

本文演示如何在 ASP.NET 應用程序中使用這些新功能。盡管本文由於與 ASP.NET 直接相關而介紹了如何提供自定義錯誤頁和一般錯誤報告,但是它並不介紹其他錯誤處理方法,如 try-catch-finally 塊和公共語言運行庫 (CLR) 異常系統。

如何使用 Page_Error 事件
Page_Error 事件提供一種捕獲在頁級別出現的錯誤的方法。您可以只是顯示錯誤信息(正如下面的示例代碼所示),也可以記錄事件或執行某個其他操作。

備註:此示例在瀏覽器中顯示詳細的錯誤信息,提供此示例只是為了進行說明。向應用程序的最終用戶顯示詳細信息(尤其是該應用程序在 Internet 上運行時)一定要小心。更適當的做法是向用戶顯示一條消息,告知已發生錯誤,然後將具體的錯誤詳細信息記錄在事件日誌中。

本示例引發一個強迫錯誤發生在 Page_Load 事件中的空異常。按照以下步驟可創建將測試 Page_Error 事件的初始頁。 1. 按照以下步驟將名為 PageEvent.aspx 的新文件添加到項目中: a. 打開 Microsoft Visual Studio .NET。
b. 在"解決方案資源管理器"中,右鍵單擊該項目節點,指向添加,然後單擊添加 Web 窗體。
c. 在名稱文本框中,鍵入 PageEvent.aspx,然後單擊打開。

2. 將以下代碼添加到 PageEvent.aspx 中:
<script language=C# runat="server">
void Page_Load(object sender, System.EventArgs e)
{
throw(new ArgumentNullException());
}

public void Page_Error(object sender,EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "<b>Error Caught in Page_Error event</b><hr><br>" +
"<br><b>Error in:</b>" + Request.Url.ToString() +
"<br><b>Error Message:</b>" + objErr.Message.ToString()+
"<br><b>Stack Trace:</b><br>" +
objErr.StackTrace.ToString();
Response.Write(err.ToString());
Server.ClearError();
}
</script>

3. 從文件菜單中,單擊保存 PageEvent.aspx。
4. 右鍵單擊該頁,然後單擊在瀏覽器中查看以運行該頁。請註意,將按照代碼規範引發和報告錯誤。
備註:您可能註意到代碼發出對 Server.ClearError 的調用。這將防止錯誤繼續到要被處理的 Application_Error 事件中。

此外,您還應記下 @ Page 指令中的 Inherits 屬性。如果已經設置 Inherits,則必須首先生成項目,然後再瀏覽到該頁。如果不首先生成項目,將看到下面的錯誤信息: ‘Project.PageEvent‘ is not a valid type

如何使用 Application_Error 事件
與 Page_Error 事件相類似,您可使用 Application_Error 事件捕獲發生在應用程序中的錯誤。由於事件發生在整個應用程序範圍內,因此您可記錄應用程序的錯誤信息或處理其他可能發生的應用程序級別的錯誤。

下面的示例基於前面的 Page_Error 事件代碼示例,如果 Page_Load 事件中的錯誤未在 Page_Error 事件中捕獲,將引發異常。Application_Error 事件在應用程序的 Global.asax 文件中進行指定。為簡單起見,本節中的步驟創建一個要在其中引發異常的新頁,捕獲 Global.asax 文件的 Application_Error 事件中的錯誤,並將該錯誤寫入事件日誌中。下面的步驟演示如何使用 Application_Error 事件: 1. 將名為 AppEvent.aspx 的新文件添加到項目中:
2. 將以下代碼添加到 AppEvent.aspx 中:
<script language=C# runat="server">
void Page_Load(object sender, System.EventArgs e)
{
throw(new ArgumentNullException());
}
</script>

3. 從文件菜單中,單擊保存 AppEvent.aspx。
4. 將 Application_Error 事件添加到 Global.asax 文件中以捕獲在 AppEvent.aspx 頁的 Page_Load 事件中引發的錯誤。註意,您必須為 System.Diagnostics 名稱空間將另一條 using 語句添加到 Global.asax,才能使用事件日誌。

將以下代碼添加到 Global.asax 文件中:
using System.Diagnostics;

protected void Application_Error(object sender, EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "Error Caught in Application_Error event/n" +
"Error in:" + Request.Url.ToString() +
"/nError Message:"+ objErr.Message.ToString() +
"/nStack Trace:"+ objErr.StackTrace.ToString();
EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
Server.ClearError();
//additional actions...
}

5. 保存 Global.asax 文件。
6. 在 Visual Studio .NET 中,在生成菜單上,單擊生成。
7. 右鍵單擊該頁,然後單擊在瀏覽器中查看。在這種情況下該頁將為空白,但是您應該註意到在事件日誌中已添加了一個新項。本示例在應用程序日誌中生成一個項, 可從事件查看器訪問應用程序日誌。在記錄錯誤之後,您可能希望將用戶重定向到另一個更用戶友好的錯誤頁或者根據需要執行一些其他操作。


如何使用 Web.config 文件
如果您不調用 Server.ClearError 或者捕獲 Page_Error 或 Application_Error 事件中的錯誤,則將根據 Web.config 文件的 <customErrors> 部分中的設置處理錯誤。在 <customErrors> 部分,可將重定向頁指定為默認的錯誤頁 (defaultRedirect) 或者根據引發的 HTTP 錯誤代碼指定特定頁。您可使用此方法自定義用戶收到的錯誤信息。

如果發生在應用程序以前的任一級別都未捕獲到的錯誤,則顯示這個自定義頁。本節演示如何修改 Global.asax 文件,以便從不調用 Server.ClearError。因此,錯誤在作為捕獲錯誤的最後一點的 Web.config 文件中進行處理。 1. 從上一個示例中打開 Global.asax 文件。
2. 將 Server.ClearError 行註釋掉,以便確保錯誤出現在 Web.config 文件中。
3. 將所作更改保存到 Global.asax 中。代碼看起來應類似如下形式:
using System.Diagnostics;

protected void Application_Error(object sender, EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "Error Caught in Application_Error event/n" +
"Error in:" + Request.Url.ToString() +
"/nError Message:"+ objErr.Message.ToString() +
"/nStack Trace:"+ objErr.StackTrace.ToString();
EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
//Server.ClearError();
//additional actions...
}

4. 將以下代碼添加到 <customErrors> 部分,以便將用戶重定向到自定義頁:
<customErrors defaultRedirect="errorStatus.htm" mode="On">
</customErrors>
備註:必須修改 defaultRedirect 屬性中的文件路徑,以便它引用相關的 Web 服務器和應用程序名稱。
5. 因為在此級別捕獲的錯誤會發送到默認的錯誤頁,所以,必須創建一個名為 ErrorStatus.htm 的錯誤頁。請記住,您要使用此方法來控制向用戶呈現的內容,因此本示例使用 .htm 頁作為錯誤頁。將以下代碼添加到 ErrorStatus.htm 中:
<HTML>
<HEAD>
<TITLE></TITLE>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
</HEAD>
<BODY>
<b>Custom Error page!</b>
<br>
You have been redirected here from the &lt;customErrors&gt; section of the
Web.config file.
</BODY>
</HTML>

6. 若要測試該代碼,請保存這些文件,生成項目,然後在瀏覽器中查看 AppEvent.aspx。請註意,在引發錯誤時,您將被重定向到 ErrorStatus.htm 頁。
盡管您可在 <customErrors> 部分中 defaultRedirect 屬性的值中引用默認的錯誤頁,但是您還可根據引發的 HTTP 錯誤代碼指定要重定向到的特定頁。<error> 子元素允許使用此選項。例如:
<customErrors defaultRedirect="errorStatus.htm" mode="On">
<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
備 註:在 <customErrors> 部分的 defaultRedirect 中指定的頁是一個 .htm 文件。如果您打算在 .aspx 頁中使用 GetLastError (正如 Page_Error 和 Application_Error 示例那樣),則在進行重定向之前,必須將異常存儲在會話變量或某個其他方法中。

請註意,<customErrors> 部分包括設置為 On 的 mode 屬性。mode 屬性用於控制錯誤重定向發生的方式。例如,如果您正開發應用程序,則很可能希望查看實際的 ASP.NET 錯誤信息,並且不希望被重定向到更用戶友好的錯誤頁。mode 屬性包括以下設置: On:未被處理的異常將用戶重定向到指定的 defaultRedirect 頁。此模式主要用於生產。
Off:用戶收到異常信息而不是被重定向到 defaultRedirect 頁。此模式主要用於開發。
RemoteOnly:只有在本地計算機上訪問該站點的用戶(通過使用 localhost)才能收到異常信息。所有其他用戶都被重定向到 defaultRedirect 頁。此模式主要用於調試。

轉自:http://www.cnblogs.com/bingyu/articles/1725033.html

http://blog.csdn.net/tuwen/article/details/4879052

asp.net自定義錯誤頁面