首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >global.asax中的Application_Error真的是处理错误的方法吗?

global.asax中的Application_Error真的是处理错误的方法吗?
EN

Stack Overflow用户
提问于 2011-05-16 23:26:25
回答 4查看 9.2K关注 0票数 7

有一天我参加面试,面试官问我global.asax的目的是什么。我说它是用来捕捉特定事件的,比如Session_Start等。然后他又说,你是如何在代码中做异常处理的?我说过我们将语句包装在try catch块中。然后他说,您会对代码中的所有按钮单击事件执行此操作吗?这太乏味和重复了。在这里,OOP是从哪里来的呢?他说你应该总是在global.asax的Application_Error中发现错误。我说的是OOP并不是说你应该捕捉这个事件中的所有错误。我们应该始终捕获特定的异常,这应该在相应的处理程序中。我们在面试时吵了一架,我直截了当地对他说,我不同意你的意见。

你能告诉我你们是如何处理服务器端的异常的吗?

提前感谢:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-16 23:47:56

我发现的简短答案是,如果你想保留这份工作,即使你不同意,你也要按照指示编写代码的方式进行编码。

但是,如果您只捕获Global.asax中的错误,那么您就失去了本地变量调试和优雅的错误处理。在Global.asax中处理的错误通常不会正常失败。

我通常会在Global.asax中发现任何未处理的错误,但对我来说,只在这里处理这件事就像没有刹车一样,因为它有安全气囊。(是的,我喜欢比喻)

票数 15
EN

Stack Overflow用户

发布于 2011-05-17 00:00:57

所有这一切的关键是区分预期和意外的异常。在编写代码时,应显式捕获预期可能发生的异常。

最好的例子就是除法。分子除以分母。您知道除以零会引发异常。此时,您可以捕获要处理的预期异常,也可以在遇到异常之前显式抛出异常(基本上是由您的需求指定的)。如果你什么都不做,意外的异常就会起作用。

根据大多数软件的编写方式,未处理的异常对于用户体验来说是糟糕的,不幸的是,更常见的异常类型。它们是由频繁的代码改动,缺乏对需求的理解,对更广泛的系统的有限知识,以及纯粹的懒惰而引入的。通常,当遇到它们时,它们会导致软件的操作方面发生突然变化。

全局异常处理程序的目的是在收集尽可能多的有价值的信息时/gracefully恢复或通知用户出了问题。/我个人认为应该以一种有意义的方式记录这些异常,并尽快解决这些问题。如果遇到这些问题,很可能是预期的条件没有被强制执行或处理,或者代码中存在导致应用程序进入无效状态的逻辑问题。

如果使用得当,全局异常处理程序是一个很好的安全网,总体上可以用来帮助提高代码质量。所涉及的风险通常来自于只依赖于全局异常处理程序,或者忽略了对报告的内容采取行动。

票数 8
EN

Stack Overflow用户

发布于 2011-05-17 00:24:10

您应该只在可以对错误采取措施时才捕获错误(而不仅仅是记录错误),这是非常罕见的。

例如,捕获SqlExceptions以重试死锁是合理的:

代码语言:javascript
运行
复制
catch(SqlException exception) {
    if (exception.Number == 1205)
        // call retry code 
    else
        throw;
}

如果你只是想记录这些异常并显示一个通用的‘and’消息,那么在你的页面的处理器方法中捕捉每个异常是不合理的。。把这些代码放在一个地方:Application_Error

要处理您可以预料到的问题(如被零除错误),您应该首先防止无效输入,或者在产生异常之前处理条件

代码语言:javascript
运行
复制
// Make sure the exception never happens and provide meaningful feedback
if (divisor == 0) {
    txtErrorMessage.Text = "Enter a value greater than zero.";
    return;
}

txtQuotient.Text = dividend / divisor;
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6019632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档