【问题标题】:Catching exceptions within .aspx and .ascx pages在 .aspx 和 .ascx 页面中捕获异常
【发布时间】:2010-09-13 09:02:50
【问题描述】:

问题说明一切,以这个示例代码为例:

<ul id="css-id">
    <li>
    <something:CustomControl ID="SomeThingElse" runat="server" />
    <something:OtherCustomControl runat="server" />
    </li>
</ul>

现在,如果在这些控件(位于母版页中)的某处引发错误,它们将关闭整个站点,如何捕获这些异常?

【问题讨论】:

    标签: c# .net asp.net exception error-handling


    【解决方案1】:

    您可以在 Global.asax 页面/类中捕获所有未处理的异常。 看:

    protected void Application_Error(Object sender, EventArgs e)
    

    方法。

    【讨论】:

    • 这只会捕获错误,不会阻止它发生。除非您在该方法中采取纠正措施
    • 主要目标应该是在控件中捕获所有与控件相关的异常。全局异常处理程序应用作先前尝试失败的最后一道防线。就像实例数据库连接失败或类似
    【解决方案2】:

    添加一个 global.asax 并实现 Application_Error 处理程序。使用 Server.GetLastError() 函数获取抛出的异常的句柄。

    【讨论】:

      【解决方案3】:

      很遗憾,未处理的异常总是会导致您的网站出错。 不过,您可以通过几种方法来防止这种情况发生。

      • 使用 web.config 中的部分显示用户友好的消息
      • 在您的 Global.asax - 或自定义处理程序中 - 捕获您未处理的异常并做出相应的反应 - like this

      最佳解决方案

      • 确保您的控件不会引发未处理的异常!

      【讨论】:

        【解决方案4】:

        使用 global.asax Application_Error 方法,如How to create custom error reporting pages in ASP.NET by using Visual C# .NET 中所述。

        另一种方法是使用HTTP module;这为您提供了更多的灵活性(例如,您可以处理来自多个应用程序的错误)。

        【讨论】:

          【解决方案5】:

          你想捕捉异常并处理它吗?

          或者你想防止黄屏死机?如果您试图阻止黄屏死机,请查看处理 HttpApplication 上的 Error 事件(换句话说,在您的 Global.asax 中)。

          有关详细信息,请参阅以下 MSDN 页面: http://msdn.microsoft.com/en-us/library/system.web.httpapplication.error.aspx

          特别是这一段:

          可以通过调用 GetLastError 方法来访问引发错误事件的异常。如果您的应用程序生成自定义错误输出,请抑制由 ASP.NET 通过调用 ClearError 方法生成的默认错误消息。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多