2012-05-10 253 views
1

我想在保留內部異常的同時顯示自定義異常消息。顯示自定義異常消息

這裏是我的示例代碼:

public class Class1 
{ 
public Class1() 
{ 
    try 
    { 
     throw new WebException("Initial Exception"); 
    } 
    catch (WebException we) 
    { 
     throw new myException("Custom Message", we); 
    } 
} 
} 

public class myException : WebException 
{ 
public myException(string msg, WebException e) : base(msg, e) { } 
} 

當我運行這段代碼就說明我在調試器中自定義消息: Screenshot1

仍然發送的InnerException消息給客戶端: Screenshot2

我在這裏做錯了什麼?如何在顯示我自己的自定義消息時保留內部異常?

+2

請注意,它仍然顯示您的自定義myException信息。我猜這是ASP.NET服務器的一個「特性」,它首先顯示內部異常數據作爲問題的源頭。我想也許,這是爲了方便服務器端調試。可能有一個服務器配置選項來控制這個,但我不知道。 「 –

+0

」您不應該定義從ApplicationException派生的新異常類,而應該使用Exception。另外,您不應該編寫捕獲ApplicationException的代碼。 - 微軟 –

+0

另外,我想你可能希望'throw;'而不是'throw e;'作爲你最後的'Exception' catch'處理程序 - 它將保留堆棧信息,而你擁有的則不會。 –

回答

0

我懷疑這是因爲ApplicationException沒有得到有效處理,catch塊引發了一個異常,然後被異常提取出來。調試器然後列出這兩個例外。

我覺得這會給你以後(我已經寫了一個控制檯應用程序)

using System; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     myException exception; 
     try 
     { 
      throw new ApplicationException("Initial Exception"); 
     } 
     catch (ApplicationException e) 
     { 
      exception = new myException("Custom Message", e); 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 

     if (exception != null) 
     { 
      throw exception; 
     } 
    } 
} 
} 


public class myException : ApplicationException 
{ 
public myException(string msg, ApplicationException e) : base(msg, e) { } 
} 
+0

的好主意,但它仍然返回最初的錯誤。 – Greg