Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在异常处理代码中处理异常?_C#_Asp.net_Exception Handling - Fatal编程技术网

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

C# 如何在异常处理代码中处理异常?,c#,asp.net,exception-handling,C#,Asp.net,Exception Handling,我在我的web应用程序中有一些代码来处理未处理的异常——它会转到一个奇特的自定义错误页面,该页面会记录详细信息。但是,如果自定义错误页面中存在未处理的异常,该怎么办 我可以通过检查Request.CurrentExecutionFilePath是否等于我的自定义错误页,在我的常规异常处理程序中检测到这种情况,从而采取措施避免循环。但是,你知道这些步骤应该是什么吗?回到死亡的黄色屏幕,转到静态自定义错误页面 或者我应该把我的自定义错误页面代码包装成一个try{…}catch{}并停止担心它吗?把你

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

我可以通过检查
Request.CurrentExecutionFilePath
是否等于我的自定义错误页,在我的常规异常处理程序中检测到这种情况,从而采取措施避免循环。但是,你知道这些步骤应该是什么吗?回到死亡的黄色屏幕,转到静态自定义错误页面


或者我应该把我的自定义错误页面代码包装成一个
try{…}catch{}
并停止担心它吗?

把你的自定义错误代码页面包装成一个try{…}catch{dosomethingthattcannotpossiblyfail()}构造。

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

最好将自定义500页作为简单html文件保存,并通过applications global.asax中的Application_Error事件记录所有异常,允许引发异常,然后使用.net自定义异常处理程序为自定义页提供服务

编辑:这里有一篇关于上述模式的相关文章。请注意,唯一的区别是我将使用静态HTML500页面


老实说,这一切都取决于您的日志记录机制的波动性,以及您希望记录每个错误的程度。您的日志记录总是有失败的可能,因为它是基于程序工作之外的内容(例如,数据库可用、有权访问日志文件、事件日志未满等)。如果没有其他原因防止向用户显示严重错误,那么您一定要将日志记录包装在try-catch块中


就我个人而言,我会输入多条日志路径。第一个可能是数据库(虽然我个人不喜欢将错误记录到数据库中,但我更喜欢日志文件),第二个可能是事件日志,同时尝试发送一封电子邮件说明某些错误。没有可靠的方法可以说我对外部源的日志记录绝对不会失败,但您可以将这种可能性降至最低,并确保无论发生什么情况,最终用户都不会看到灾难性的失败错误

任何异常日志代码本身都应该放在try{}catch(exception ex){//donothing here}empty catch块中。在异常日志代码中有时可能会发生“疯狂的事情”。只要假设有人稍后出现并忽略文件中的所有注释,然后添加一些代码,这些代码可以在catch{…}块中或try{…}catch{…}之外抛出异常。也许我太过分了,不想为这种可能性辩护……这种方法的问题是,如果异常已经发展到这个程度(即500页),那么唯一可能的想法就是在这个阶段吞下异常,这绝不是一个好主意。与其用定制的500页jdt199通知用户失败,不如直接记录这次考察:这就是为什么我的答案中catch块不是空的;-)完全吞咽是个坏主意,同意。诺伊:对愚蠢没有万无一失的防御。在某个时候,你应该放弃,让服务器来做500。过多的异常处理会使测试异常处理程序变得非常困难。