ASP.NET中的全局错误处理

9

ASP.NET应用程序全局捕获错误(例如:Global.asax)是否存在问题?我查看了良好的错误处理实践,但它并没有太多关于此方面的内容。

我的经验是,在排除某些非常特殊的情况(例如事务)之外,我们编写的大多数ASP.NET应用程序都是类似于以下内容的:

void ButtonEventHandler(object sender, EventArgs e) {
    Page.Validate();
    if (Page.IsValid) {
        //Do a database insert or update thru relevant datalayers.
        //If its a transaction then we rollback internally and rethrow
        //the exception.
    }
}

为什么不设置全局异常处理程序?通常(在这种情况下),我所能做的唯一事情就是优雅地终止操作并告诉用户再试一次。

https://dev59.com/9nVC5IYBdhLWcg3w4VX6 - ChrisBint
在同一点上,我通常会捕获已知的可能异常并向用户显示消息,将意外异常留给全局处理。您可以捕获所有异常(大多数人反对此做法)并显示消息,只要您已记录了异常。如果您没有记录异常,那么追踪错误将是一个巨大的痛苦。您可能需要花费数周时间来重现由罕见的数据库/服务故障引起的错误。 - Joseph Yaduvanshi
2个回答

8

但是请稍等,我的观点是这样的... 是的,当然,如果我能在源头上处理异常,我会这样做,但通常唯一剩下的操作就是记录错误并中止。我的意思是,例如如果出现 SQL 超时,我能做什么呢?那么为什么我要在每个页面中都复制这段代码呢? - Maxim Gershkovich
@MaximGershkovich 没错,我会把错误处理代码放在 Application_Error 上,只针对未处理的异常。 - Icarus

1

我认为是这样。您应该尽可能接近特定操作捕获可能预期的异常并适当地处理,但除此之外(或在进行某些清理和重新抛出后),记录异常并转到通用的500响应的全局处理程序是一个很好的默认行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接