2012-04-05 61 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