2016-03-23 19 views
0

私のアプリケーションでASP.NETカスタムエラーページを使用しています。 customErrorsタグのweb.configファイルのエントリがServer.ClearError()ページリフレッシュ

<customErrors mode="On" defaultRedirect="Error.aspx" redirectMode="ResponseRewrite" /> 

は、以下の

され、次の「EX」はNULLでない場合Error.aspxページ

protected void Page_Load(object sender, EventArgs e) 
    { 
     if(!IsPostBack) 
     { 
      Exception ex = Server.GetLastError(); 
      if(ex != null) 
      { 
       CommonUtils.SendException(ex.Message.ToString(), ex.StackTrace.ToString()); 
       Server.ClearError(); 
      } 
     } 
    } 

上のコードスニペットで、コードが例外電子メールを送信します。これは正常に動作します。

電子メールを送信した後、ユーザーが更新ボタンを押した場合に電子メールが送信されないように、すべてのエラーをクリアします。しかし、Server.ClearErrorを使用した後でさえ、Server.GetLastError()によって値が返され、ページがポストバックされます。

+0

なぜGlobal.asaxの 'ApplicationError()'メソッドでこれを保持し、server.transfer()を使ってエラーページに移動しますか? – Webruster

答えて

0

あなたのコードは次のようなものに書き換えする必要があります。 Global.asax.cs

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception ex= Server.GetLastError(); 
    CommonUtils.SendException(ex.Message.ToString(), ex.StackTrace.ToString()); 
} 

とエラーページのPage_Loadイベントが空でなければなりません。このMSの記事で読むことができるように、https://support.microsoft.com/en-us/kb/306355 Server.ClearErrorsはエラーの伝播を停止します。ページでエラーを呼び出すと、Application_Errorイベントで処理されません。 Application_Errorで呼び出さないと、アプリケーションはweb.config内のcustomErrors宣言を探して、そのページにリダイレクトします。

あなたはServer.ClearErrorというか、トラップ のPage_ErrorかのApplication_Errorイベントハンドラでエラーを呼び出していない場合は、エラーがWeb.configファイル ファイルのセクションの設定に基づいて を扱っています。このセクションでは、リダイレクトページ を既定のエラーページ(defaultRedirect)として指定するか、発生したHTTPエラーコードに基づいて特定の ページを指定できます。この メソッドを使用して、ユーザーが受け取るエラーメッセージをカスタマイズできます。

アプリケーション内の以前のレベル のいずれにもトラップされていないエラーが発生した場合、このカスタムページが表示されます。このセクション は、 Server.ClearErrorが呼び出されないように、Global.asaxファイルを変更する方法を示しています。その結果、Web.configファイルのエラーは、エラーをトラップする最後のポイントとして として処理されます。

関連する問題