【问题标题】:Exception handling in ASP.NET WebformsASP.NET Webforms 中的异常处理
【发布时间】:2010-10-08 04:23:29
【问题描述】:

在 ASP.NET Webforms 中处理异常的首选方法是什么?

您有在 web.config 级别添加(我认为)的 Page_Error 方法,当发生错误时,整个站点都会被重定向到那里。

这是否意味着您不应该在 Web 表单应用程序的任何地方使用 try-catch? (假设您不想隐藏任何错误)

【问题讨论】:

    标签: asp.net exception-handling webforms


    【解决方案1】:

    只捕获您可以处理的错误。如果您可以以允许页面继续加载的方式处理它们,那么就这样做。任何其他会破坏页面的异常都不应该在任何控件或页面中处理,因为无论如何您都无法执行任何操作。让它转到 global.asax 处理程序并确保记录异常。

    【讨论】:

      【解决方案2】:

      除了 Andrew 的建议之外,请确保更新 web.config 文件以将 CustomErrors 设置为“On”,并指定一个通用错误页面来重定向这些顶级错误。 Global_asax 仍然会记录错误,然后用户可以看到一个友好的页面。它还允许您配置一些标准类型的错误,例如 404 和 200,等等。

      【讨论】:

        【解决方案3】:
        • Web 应用程序通常由 UI、业务和数据访问层组成。每一层都必须在异常处理方面发挥自己的作用。每个层都必须(为了代码重用性)检查错误条件并包装异常(在记录它之后),并可能传播到调用层。 UI 层应该隐藏异常并显示友好的消息。在 UI 中捕获所有异常可能不是一个好主意。如果可能,应将异常记录在数据库中。这将便于维护和纠正错误

        • 尽可能避免捕获异常。在使用之前尝试并验证所有输入。在验证控件、自定义控件和正则表达式的帮助下,严格验证(客户端和服务器端)输入是必须的。

          string fname = "abc";
          //Always check for condition, like file exists etc...
          if (System.IO.File.Exists(fname))
          {
          
          }
          else
          {
          
          }
          
        • 始终确保调用了清理代码。使用语句或最后尝试。

        • 您可以在 Global.asax(asp.net 应用程序文件)中捕获所有异常

          void Application_Error(object sender, EventArgs e) 
          { 
              // Code that runs when an unhandled error occurs
              Exception objErr = Server.GetLastError().GetBaseException();
              string err = "Error Caught in Application_Error event\n" +
                 "Error in: " + Request.Url.ToString() +
                 "\nError Message:" + objErr.Message.ToString()+ 
                 "\nStack Trace:" + objErr.StackTrace.ToString();
              EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
              Server.ClearError();
              //additional actions...
          
          }
          

        并在您的 Web 配置中添加 <customerror> 部分以将用户重定向到单独的页面

            <customErrors defaultRedirect="error.htm" mode="On">
            </customErrors>
        

        【讨论】:

          【解决方案4】:

          您应该在可以对错误做一些有意义的事情的地方使用 try/catch,例如修复错误或采取不同的方法。

          对于所有其他情况,您应该使用全局 try/catch 使用 web.config 自定义错误页面或 Application_Error 事件来记录错误并可能将其显示给用户。

          【讨论】:

            【解决方案5】:

            如果您在后面的代码中使用验证控件或检查和验证用户输入,这将大大有助于防止错误。我确实建议有一个可以为您记录错误的通用错误页面。如果您不确定会发生什么,我建议尽可能捕捉错误并处理它,并努力寻找一种方法来知道您将要运行的内容在执行之前会起作用。

            您是否有一个具体的示例来说明您可能会遇到此类错误的位置。我知道的一种情况是会话到期并且您无法再处理该页面。在运行其他任何操作之前,我会在每次页面加载时检查此问题,然后在发生这种情况时重定向用户。

            【讨论】:

              猜你喜欢
              • 2018-10-09
              • 2012-01-09
              • 1970-01-01
              • 2011-09-30
              • 2010-10-29
              • 1970-01-01
              • 1970-01-01
              • 2012-09-17
              • 2012-07-26
              相关资源
              最近更新 更多