網(wǎng)頁出錯(cuò),在所難免,如何處理,方案任選. 一般頁面出錯(cuò)后,我們的處理方法一般分為三步:業(yè)務(wù)邏輯→寫入日志→跳轉(zhuǎn)到默認(rèn)頁或指定頁
【方案一】 1.在web.config添加一個(gè)節(jié)點(diǎn),指定跳轉(zhuǎn)到的默認(rèn)頁.mode為RemoteOnly表示本地報(bào)黃頁,其它用戶跳轉(zhuǎn). <system.web>
<customErrors mode="On" defaultRedirect="default.aspx"> </customErrors> </system.web>
2.在Global.asax中添加錯(cuò)誤處理
void Application_Error(object sender, EventArgs e)
{ //在出現(xiàn)未處理的錯(cuò)誤時(shí)運(yùn)行的代碼 //業(yè)務(wù)處理 //寫日志,下面是一個(gè)例子,建議使用第三方控件Log4Net try { using (System.IO.StreamWriter sw = System.IO.File.AppendText("D:\\AX.txt")) { sw.WriteLine(Server.GetLastError().InnerException.Message); sw.WriteLine(Server.GetLastError().InnerException.StackTrace); sw.Flush(); } } catch (Exception) { } }
3.如果某個(gè)Page出錯(cuò)后需要跳轉(zhuǎn)到指定頁,重寫Page的AddParsedSubObject方法, 以保證頁面加載最開始為Errorpage屬性賦值,其屬性依賴于第一步中的mode="On", 不確定mode為RemoteOnly是否可以 (跳轉(zhuǎn)頁后面會(huì)帶系統(tǒng)默認(rèn)的參數(shù)aspxerrorpath=...) 懶人可以寫在Page_Load方法的第一句話中,該方法之前出錯(cuò)將會(huì)使用第二步中的處理方式.我是懶人... protected override void AddParsedSubObject(object obj)
{ ErrorPage = "Log4Net.aspx"; base.AddParsedSubObject(obj); } 【追加】還可以在頁面前端加Attribute:ErrorPage
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="OnErrorTest.aspx.cs" Inherits="OnErrorTest" ErrorPage="~/AX.aspx" %>
【方案二】 1.在Global.asax中添加錯(cuò)誤處理,并指定默認(rèn)頁.
void Application_Error(object sender, EventArgs e)
{ //在出現(xiàn)未處理的錯(cuò)誤時(shí)運(yùn)行的代碼 //業(yè)務(wù)處理 //寫日志,下面是一個(gè)例子,建議使用第三方控件Log4Net try { using (System.IO.StreamWriter sw = System.IO.File.AppendText("D:\\AX.txt")) { //Server.GetLastError().InnerException.ToString()是異常的詳細(xì)內(nèi)容 sw.WriteLine(Server.GetLastError().InnerException.ToString()); sw.Flush(); } } finally { //跳轉(zhuǎn)到默認(rèn)頁 Server.Transfer("Default.aspx"); } }
2.如果某個(gè)Page出錯(cuò)后需要跳轉(zhuǎn)到指定頁
void Page_Error(object sender, EventArgs e)
{ //業(yè)務(wù)處理 //寫日志 //跳轉(zhuǎn)到指定頁 //Server.Transfer("Log4Net.aspx"); //或 //Response.Redirect("Log4Net.aspx"); //清除錯(cuò)誤,如果執(zhí)行了上面的跳轉(zhuǎn)頁,將永遠(yuǎn)不會(huì)執(zhí)行到這句話 //如果不清除,就會(huì)執(zhí)行Global.asax的Application_Error()方法 //Server.ClearError(); }
推薦使用方案一,因?yàn)榭梢栽趙eb.config修改跳轉(zhuǎn)的默認(rèn)值 |
|