ASP.NET未处理异常的处理
ASP.NET页面出现未处理异常时,其页面信息用户很难理解,我们的要求是:
(1)记录错误信息;
(2)对用户隐藏错误,只告知用户出错了。
1.在页面上处理(推荐)
创建一个类,其它页面从该类继承
public class WebPage : System.Web.UI.Page
{
//添加事件处理方法
private void MyPage_Error(object sender, EventArgs e)
{
//DoSomething();
}
//登记Error事件
private void InitializeComponent()
{
this.Error += new EventHandler(MyPage_Error);
}
}
2.在应用程序级处理(Global.sxsx.cs)
protected void Application_Error(Object sender, EventArgs e)
{
//DoSomething();
}
3.修改Web.Config文件
<customErrors
mode="RemoteOnly"
defaultRedirect="myerror.aspx"
>
4.调用顺序
调用顺序依次为:页面级->应用程序级->配置文件
如果在上一级代码中有页面重定向,则后面级别的程序就不会执行。
5.DoSomething();
主要做两件事:(1)记录出错信息。(2)重定向页面。
private void DoSomething()
{
string ErrorID = DateTime.Now.ToString();
string ErrStr = "ErrorID:" + ErrorID;
ErrStr += "\r\n";
ErrStr += Server.GetLastError().ToString();
ErrStr += "\r\n";
WriteLog(ErrStr);
Server.ClearError();
string url = "/MyProject/FrmError.aspx?Message=发生未处理异常,请与系统管理员联系。";
Response.Redirect(url);
}
6.WriteLog();
private void WriteLog(string info)
{
string FileName = Server.MapPath("/MyProject/LogFiles/Error.LOG");
using (StreamWriter sw = new StreamWriter(FileName,true))
{
sw.WriteLine(info);
}
}
7.Response.Redirect 还是 Server.Transfer
(1)Server.Transfer:在服务器端把处理的控制权从一个页面转移到另一个页面,在转移的过程中,不会丢失用户提交信息,而且浏览器的 URL 不变。
(2)Response.Redirect: 发送一个 HTTP 响应到客户端,告诉客户端跳转到一个新的页面,客户端再发送跳转请求到服务器。
(3)Server.Transfer只能够转跳到本地虚拟目录指定的页面,而Response.Redirect则十分灵活;
8.Session失效的问题
Session失效的异常用户可以自己恢复,所以应单独处理。
protected void CheckUserInfo()
{
if (Session["UserInfo"] != null)
{
m_cUser = (CAppUser)Session["UserInfo"];
}
else
{
Response.Redirect("/MyProject/frmError.aspx?Message=当前页面已过期,请重新登陆!");
}
}
签名区:
如果您觉得这篇博客对您有帮助或启发,请点击右侧【推荐】支持,谢谢!