2012-04-05 62 views
0

我们在我们的ASP.NET网络应用程序中使用ELMAH,并且对于我们获得的一些例外情况,我感到难以置信。其中一些是:.NET异常:每种异常类型是否都有自己的消息文本?

  • 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.

这告诉回答者是正确的,在某些例外情况应被忽略基于例外和消息文本。

+0

为什么在地球上有人投票结束对此保持匿名? – oscilatingcretin 2012-04-05 14:43:28

回答

0

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

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

+0

我使用ELMAH。虽然我没有想到内在的例外。我不确定ELMAH是否会报告关于内部异常的任何细节,但我认为这值得查询。不过,我的问题是“每个异常类型是否都有自己的消息文本?”。 – oscilatingcretin 2012-04-05 16:22:18

+0

答案是否定的,.NET不能保证它。并且不能保证它,许多消息是动态生成的。无论是由框架代码或您的代码或像数据库提供商一样的库。即使由完全相同的错误导致的完全相同的异常也不能保证完全相同的消息。它可能是本地化的。 – 2012-04-05 16:27:26