C# ASP.NET中的全局错误处理

C# ASP.NET中的全局错误处理,c#,asp.net,error-handling,C#,Asp.net,Error Handling,全局捕获ASP.NET应用程序中的错误(例如:Global.asax)有什么问题吗?我已经看过了这个问题,它并没有说太多 我的经验是排除了一些非常特殊的情况(如事务),我们正在编写的大多数ASP.NET应用程序都遵循 void ButtonEventHandler(object sender, EventArgs e) { Page.Validate(); if (Page.IsValid) { //Do a database insert or update t

全局捕获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.
    }
}

为什么不使用一个全局异常处理程序呢?通常(此时),我唯一能做的就是优雅地中止操作,并告诉用户再试一次。

我认为是这样。您应该捕获可能在某个特定操作上出现的异常,并尽可能地接近该操作,并采取适当的行为,但不允许这样做(或者在该操作完成一些清理和重新执行之后,可能会遵循该操作)记录异常并转到常规500响应的全局处理程序是一种良好的默认行为。

处理未修补异常的全局位置将位于。正如John指出的,您应该始终尽可能靠近异常可能发生的位置处理异常,并做出适当的反应。

同时,我通常捕获已知的可能异常,并向用户显示一条消息,将意外异常留给全局处理。您可以捕获所有异常(大多数人对此持反对意见),只要您记录了异常,就可以显示一条消息。如果不记录异常,跟踪错误将是一件非常痛苦的事情。您可能会花费数周的时间试图重现由罕见的数据库/服务故障引起的错误。但请稍候,我的观点是。。。。是的,当然,如果我能以某种方式在源代码处处理异常,我会这样做,但通常剩下的唯一操作是记录错误并中止。我的意思是,如果有SQL超时,我该怎么办?那么为什么我要在我的每一个页面中复制这个代码呢?@MaximGershkovich确切地说,我会将错误处理代码放在
Application\u error
上,只针对未处理的异常。