Asp.Net自定义错误页心得介绍
抛开Try Catch 不说(这种地球人都知道),ASP.NET提供了四种错误处理机制,分别为:Page_Error, ErrorPage,Application_Error,<customErrors>四种,如果加上Try Catch就算五种吧,可以理解为:一种局部变量---Try Catch ,两种页面级变量:Page_Error, ErrorPage,两个全局变量:Application_Error,customErrors,在这里提前说一下他们的执行顺序,从高到低排序:Page_Error > ErrorPage > Application_Error > <customErrors>下面将会按照这四种执行的高低顺序做一下详细的使用介绍。
首先:Page_Error 大家一看这个词语,估计大体上就明白了什么意思了,就是页面级处理程序,A页面出错了,A的Page_Error处理A的错误,B页面出错了,B的Page_Error处理B的错误,大家可以喝try catch一样理解,只是这个比try catch范围大了一些,一个方法里面有try catch,这个方法出错了,就在catch中处理,一个页面出错了,就在Page_Error中处理。
使用方法:在页面里面加入此方法即可
protected void Page_Load(object sender, EventArgs e)
{
//错误后的操作如:写日志,给用户输出自己期望的错误信息
}
优点:处理比较灵活,对于经常出错的页面,直接添加就可以了。
缺点:他属于页面级变量,更多的时候,我们不知道那些页面会出错,所以如果使用这种处理方法,需要每个页面都写,比较麻烦
第二:ErrorPage 其实ErrorPage 和Page_Error非常类似,大家可以看做是前台js处理,也是页面级处理程序,但是在这里不推荐使用,可能是因为习惯问题,个人感觉ASP.NET比asp最方面的地方就是代码后置,既然这样,为什么能写在后台的东西,非要写在前台呢?呵呵,。。当然,这个也属于个人习惯,很多东西,必须写在前台,那是没办法的事情,好了扯远了,下面看一下他的用法
使用方法:在页面里面加入此方法即可
protectedvoid Page_Load(object sender, EventArgs e)
{
this.ErrorPage ="ErrorPage.htm";
}
</script>
优点: 请参考Page_Error
缺点: 请参考Page_Error
第三: Application_Error 看到Application_Error,熟悉ASP.NET的人一眼就知道,它属于Global.asax中的全局变量,没错,它就是一个全局处理机制,我们不仅要问,Application_Error和customErrors都是全局变量,他们有什么不一致呢?机理上的不一致在这里就不说了,主要说一下用法上的不一样,customErrors只能让你跳到到你想要的页面,不能记录错误信息,它会自动处理掉,Application_Error可以接收和处理这些错误信息
使用方法:在Global.asax中处理,Application_Error方法Global会自动就生成了
{
Exception ex =this.Context.Server.GetLastError();
if (ex!=null)
{
this.Context.Server.Transfer("/Error.aspx");
//可以再这里写日志,也可以再Error写日志,并且展示给用户一个友好的界面
this.Context.Response.Clear();
}
}
优点:全局变量,在这里写一次,所有的页面出错了,都会自动跳转到错误页面,省时省力,并且可以记录相关错误
缺点:全局变量的确定大家都明白的,需要消耗一部分的性能
第四: customErrors 其实customErrors就是Web.config的一个配置项,在这里配置以后,页面出错后,会自动跳转到相应的错误页面,这种相信大家都用过非常频繁了。在这里就简单介绍一下了
使用方法:
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="Error403.htm"/>
<error statusCode="404" redirect="Error404.htm"/>
</customErrors>
</system.web>
优点:对于那些页面连接不存在,或者程序出错,给用户以友好的提示,这个用的是很多的
缺点:没法记录具体错误信息
出处:http://www.cnblogs.com/kingboy2008/
本文版权归作者和博客园、今日头条、CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-博客园—灵雨飘零、今日头条—IT技术资源爱好者 和 CSDN—灵雨飘零。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!