在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在.net应用开发中,程序在运行时总会由于一些无法预料的、不合法的客观条件产生问题,抛出异常。如:在类型转换时,将一个非数字型字符转换为整形时;一个引用类型未进行初始化我们却调用它的方法或属性时;io操作时资源未准备好时;数据库操作时,db server无法访问、或者sql出错的时候,等等。 Asp.Net默认是怎么处理异常的在产生异常的时候如果我们没有在自己的代码中捕获异常的话,应用程序会将异常信息交给asp.net runtime, 将将会抛出一个 在webconfig配置文件中,<customErrors>该节点定义了HttpUnhandledException这个类的处理行为。不同的行为依赖于customErrors节点的mode属性,共有下面三个属性:
当我们自定义错误页面的时候,可以这样<customErrors mode="On" defaultRedirect="~/error.aspx" />定义一个错误页面,也可以针对不同的异常类型指定不同的错误页面,如: <customErrors mode="On" defaultRedirect="error.aspx"> <error statusCode="404" redirect="404.aspx"/> <error statusCode="500" redirect="500.aspx"/> </customErrors> 这样产生错误的时候就会根据不同的http码跳转到不同的页面了。 另补充一句:
404了我该做些什么在发生404的时候有时是我们自己的站点链接写的不正确,或者是来自一些其他站点的错误外链,那么这个时候我们知道该链接来自哪里很重要,所以在404后跳转的页面中我们最好将发生了什么,在哪里发生的告诉自己,并及时的处理。开始在想这个问题的时候我还觉得用urlref获取不到错误页面的来源。后来发现在 404我们获取到死链接的来源了,那么我们如何获取到详细的错误信息呢?一个问题是,当我们定义了友好的错误页面后,我们不能获取到详细的错误信息。如:在1.aspx页面发生了异常,将直接回跳转到500.aspx页面中,相当于2个请求,在新的请求当中(302跳转),我们是没有办法获取到前一个页面的信息的。下面看看针对这种情况我们如何处理它。 当一个未处理的异常抛给asp.net runtime时,会激发一个应用程序级别的异常事件,通过在这个事件中获取处理异常,我们可以记录日志,发邮件通知作者,用 如何在应用程序级别的异常事件中处理异常
这样我们就可以捕获到应用程序发生的异常信息并且记录、发邮件啊之类的,之后在进行跳转到自定义的有好错误页面。 //获取到页面发生的异常对象 var error = Server.GetLastError(); if (error is HttpUnhandledException && error.InnerException != null) { error = error.InnerException; } try { //do something with error infomation } catch { } Server.Transfer("yourcustompage.aspx"); 用HttpModule方式处理异常事件为什么要用HttpModule的方式? 这种方式提供了一种更灵活的处理方法,我们可以简单的将dll放到bin目录并且改几句配置文件就可以加入我们的功能,非常灵活自由。 开源日志库:ELMAH
参考文摘: http://www.4guysfromrolla.com/articles/090606-1.aspx http://www.4guysfromrolla.com/articles/091306-1.aspx |
请发表评论