ASP.NET如何处理未处理的异常?

时间:2012-07-28 11:25:54

标签: c# asp.net exception exception-handling visual-studio-debugging

在编写ASP.NET时,并且在附加调试器时,如果您访问引发异常的网页,则会在导致异常的代码行中启动未处理的异常帮助程序。

即使您只捕获未处理的异常并且没有捕获抛出的异常,也会发生这种情况。但是,按F5,忽略异常或未连接调试器不会导致AppDomain被拆除。相反,ASP.NET无论如何都会处理未处理的异常。

这是如何工作的,这样的异常处理是否可以在其他地方实现,以便吞下其他未处理的异常而不是杀死整个AppDomain或进程?

编辑:为了澄清,我理解异常处理和try ... catch块是如何工作的。但是,在这种情况下,似乎调试器正在考虑异常未处理,而同时ASP.NET正在try ... catch中包装异常。这就是我想要模仿的行为。

2 个答案:

答案 0 :(得分:2)

  

这是如何运作的,

只是在他们想要的任何异常处理代码中包装执行代码。 asp.net网页(或视图或控制器)只是一个类,如何使用它完全取决于主机(在我们的例子中,asp.net)。

  

为什么VS调试器如果被处理就会中断?

引用MSDN documentation

  

ASP.NET有一个顶级异常处理程序,用于处理向浏览器用户显示错误页面的异常。除非启用“仅我的代码”,否则该顶级异常处理程序将阻止未处理的异常进入调试器。确保启用Just My Code for ASP.NET调试。

这意味着如果你在VS Debug选项中启用了“Just my code”(并且默认情况下已启用),那么你将打破在你自己的代码中未处理的异常,无论它们是在你的调用者中处理还是不

  

可以在其他地方实现这样的异常处理,以便可以吞下其他未处理的异常,而不是杀死整个AppDomain或进程吗?

你不能这样做,这是一种安全措施。

答案 1 :(得分:1)

您的网页只是来自IIS& A的一系列方法调用。在ASP.NET运行时,您的网页不是在您的应用程序域中单独运行。调用代码的代码在该方法调用周围有一个普通的try / catch块。

您可以自己创建类似的设置:

这些程序的问题是:应用程序应该继续在哪里?

最后一个问题在ASP.NET中很容易解决,因为每个页面调用都是相互隔离的。用户只需再次导航到页面即可继续。