【问题标题】:Does Global Exception Handlers imply removal of unnecessary try catch blocks?全局异常处理程序是否意味着删除不必要的 try catch 块?
【发布时间】:2013-10-05 03:50:00
【问题描述】:

我对在 ASP.NET 和 WCF(IErrorHandler) 中使用全局异常处理程序(Application_Error/Page_Error)有一些基本的疑问。

如果我使用上述任何一种,每个异常都会通过它们吗?我可以根据自己的意愿记录和映射它们吗?这是否也促进了删除所有不必要的 try catch 块并在需要的地方用 try finally 替换它们?

我所说的“不必要”是指捕获最终变得多余的块。例如如果我在 wcf 中捕获所有 DB 异常并将它们转换为特定的 FaultException 并且现在我在 ProvideFault 方法中进行相同的转换,那么我现在不应该删除这些 catch 块,因为他们所做的唯一工作就是创建 FaultException 与客户端友好详情?

【问题讨论】:

  • 不...只是不。 ::颤抖::
  • try catch 块的存在是有原因的 - 允许程序优雅地处理可能导致应用程序崩溃或导致意外行为或结果的错误。依赖全局错误处理程序来捕获 otherwise 未处理的异常是一种糟糕的设计方法。一个设计良好的程序将同时具有 - try catch 块来处理某些条件已知可能的条件,以及一个全局处理程序来捕获任何真正意外的情况。
  • 蒂姆的评论应该成为答案。这正是您所需要的 - 简短而准确。
  • 全局异常处理程序是否意味着删除不必要的 try catch 块? 不,不必要的 try catch 块 意味着删除 不必要的 try catch 块.

标签: c# asp.net .net wcf


【解决方案1】:

是的,您可以全局记录错误,但它不会消除您在页面中进行错误处理的需要(旁注,一些错误,如 StackOverflowException,不会被捕获)。在全局级别记录的唯一错误应该是意外的,而不是避免使用 try/catch 的方法。下面是一个简单的例子说明原因:

您要求用户输入一个数字。您将输入解析为 int。他们输入了一个字符串。您想在全局级别记录此错误吗?不。您希望捕获它并向用户显示和显示错误。

另外,在 NuGet 中搜索 Elmah,看看它是否适合您。在 5 分钟内处理错误。

【讨论】:

  • WCF 怎么样?我认为我可以尽量减少 try catch 块的使用?
  • 蒂姆说了什么。在全局级别记录的唯一错误应该是意外的。这不是让您永远不再使用 try catch 的方法。
猜你喜欢
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 2011-04-01
相关资源
最近更新 更多