【问题标题】:.NET Exceptions: Does each exception type have its own message text?.NET 异常:每种异常类型都有自己的消息文本吗?
【发布时间】:2012-04-05 14:27:13
【问题描述】:

我们将 ELMAH 用于我们的 ASP.NET Web 应用程序,我对我们遇到的一些异常感到困惑。其中一些是:

  • System.FormatException:Base-64 字符数组的长度无效。
  • System.Web.HttpException:无法验证数据。
  • System.Security.Cryptography.CryptographicException:填充无效,无法删除。

我根本不知道它们为什么会出现,但最终用户显然看不到它们,所以我想忽略它们并禁止发送电子邮件。如果我这样做,我想确保 System.FormatException 仅将 Invalid length for a Base-64 char array. 用于其消息文本,而不是其他一些消息。如果确实如此并且我忽略了它,我可能会错过在 System.FormatException 下引发的其他异常。如果是这种情况,我必须检查消息文本。这不是问题,但我真的不喜欢在我的应用程序中硬编码字符串。

更新:

我试过这段代码:

        try
        {
            throw new System.FormatException();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

        Console.Read();

它的消息文本是:

One of the identified items was in an invalid format.

这表明回答者是正确的,应该根据异常和消息文本忽略异常。

【问题讨论】:

  • 为什么会有人投票关闭这个仍然匿名的?

标签: exception elmah


【解决方案1】:

异常的 Message 属性无法帮助您诊断代码中的错误或用户配置问题。这也是为什么你不知道它们为什么会发生的原因。您必须在电子邮件中添加更多信息,特别是异常的 StackTrace 属性对于帮助您准确找出异常发生的位置至关重要。如果一个异常有一个 InnerException,那么你总是需要知道它,因为它通常是另一个异常被触发的核心原因。

只需使用异常的 ToString() 方法来生成更好的诊断信息以放入您的电子邮件中。

【讨论】:

  • 我使用 ELMAH。不过,我没有想到内在的例外。我不确定 ELMAH 是否报告有关内部异常的任何详细信息,但我认为值得查找。不过,我的问题是“每种异常类型都有自己的消息文本吗?”。
  • 答案是否定的,.NET 不能保证。而且不能保证,很多消息都是动态生成的。通过框架代码或您的代码或某些库(如数据库提供程序)。即使由完全相同的错误引起的完全相同的异常也不能保证完全相同的消息。它可能是本地化的。
猜你喜欢
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2010-09-25
  • 2011-11-11
  • 1970-01-01
  • 2017-10-07
相关资源
最近更新 更多