如何在异常处理代码中处理异常?

时间:2009-11-18 12:04:49

标签: c# asp.net exception-handling

我的网络应用程序中有一些代码可以处理未处理的异常 - 它会转移到一个奇特的自定义错误页面,该页面会记录详细信息。但是,如果自定义错误页面中存在未处理的异常,该怎么办?

我可以通过检查Request.CurrentExecutionFilePath是否等于我的自定义错误页面来检测我的常规异常处理程序中的这种情况,从而采取措施避免循环。但任何想法应该是什么 - 回到死亡的黄色屏幕,切换到静态自定义错误页面?

或者我应该将自定义错误页面代码包装在try {...} catch {}中并停止担心吗?

3 个答案:

答案 0 :(得分:2)

我会使用.nets自定义错误框架并将静态html文件设置为500错误的目标。让自定义500页面做任何可能失败的事情都是一个坏主意,因为任何io命令可能已经失败(例如数据库或文件访问)。

最好将自定义500页作为简单的html文件保存,并通过应用程序global.asax中的Application_Error事件进行所有异常日志记录,允许抛出异常,然后使用.net自定义异常处理程序提供自定义页面

编辑:这是关于上述模式的相关文章。注意唯一的区别是我会使用静态html 500页

http://devhood.com/tutorials/tutorial_details.aspx?tutorial_id=237

答案 1 :(得分:0)

将自定义错误代码页包装在try {...} catch {doSomethingThatCannotPossiblyFail()}构造中。

答案 2 :(得分:0)

老实说,这一切都取决于您的日志记录机制的波动性,以及您想要记录每个错误的严重程度。总是有可能您的日志记录将失败,因为它基于程序外部的工作(例如,数据库可用,可以访问日志文件,事件日志未满等)。如果没有其他原因可以阻止向用户显示一个巨大的错误错误,你绝对应该把你的日志记录在try catch块中。

就个人而言,我会提出多种日志记录。第一个可能是数据库(虽然我个人不喜欢将错误记录到数据库,我更喜欢日志文件),还有第二个到事件日志,并尝试发送一封说明错误的电子邮件。没有确定的火灾方式可以说我对外部源的记录绝对不会失败,但您可以最大限度地减少这种可能性,并确保无论发生什么情况,最终用户都不会发现灾难性故障错误。