2012-05-10 12 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を捕捉するコードを記述しないでください。 - Microsoft –

+0

また、最後の 'Exception'' catch'ハンドラとして' throw e; 'ではなく' throw;を望むかもしれないと思います。スタック情報を保持しますが、持っているものは保持しません。 –

答えて

0

これは、ApplicationExceptionが効果的に処理されず、キャッチブロックが例外をスローし、それがベース例外として選択されているためです。デバッガは両方の例外をリストします。

私は、ユーザーが見ているメッセージをカスタマイズする方法は、カスタムエラーページを提供することである

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

関連する問題