2

try / catchブロックのエラーに対する私の応答が、ユーザーをエラーページにリダイレクトすることである場合、try / catchブロックは、エラーがなかったときにエラーがあったかのように動作します。他のことをするように変更すると、コードは正常に機能します。

例:

try
{
    //do this SQL server stuff
}
catch
{
   Response.Redirect(error.htm)
   //Change this to lblErr.Text = "SQL ERROR"; and the code in try works fine.
}

別の投稿から、Response.Redirect()メソッドにブール値のオーバーロードがあることを知りました。trueとfalseの両方を試しましたが、try/catchブロックはエラーが発生したかのように動作しました。

どうしたんだ?

4

4 に答える 4

10

Response.Redirectを実行すると、ThreadAbortExceptionがスローされます。したがって、説明している結果を得るには、次のようにコードを変更する必要があります。

try  
{
   // Do some cool stuff that might break
}
catch(ThreadAbortException)
{

}
catch(Exception e)
{
  // Catch other exceptions
  Response.Redirect("~/myErrorPage.aspx");
}
于 2012-09-10T19:58:40.297 に答える
4
Response.Redirect("url");

設計上、これは例外をスローすることによって呼び出しスレッドを終了します。

Response.Redirect("url", false);

例外がスローされるのを防ぎますが、コードは実行を継続できます。

使用する

Response.Redirect("url", false);
HttpContext.Current.ApplicationInstance.CompleteRequest();

ユーザーをリダイレクトし、例外をスローせずに実行を停止します。

于 2012-09-10T20:01:53.900 に答える
1

HandleError属性を使用する必要があります。

[HandleError]
public ActionResult Foo(){
    //...

    throw new Exception(); // or code that throws execptions

    //...
}

そうすれば、例外によって自動的にエラーページにリダイレクトされます。

于 2012-09-10T19:58:33.853 に答える
0

引用符とセミコロンを忘れました:

Response.Redirect("error.htm");
于 2012-09-10T19:58:28.590 に答える