- - PR -
ASPのResponse.Redirectについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-23 14:52
VisualC#とASPでWebアプリを作成しています。
VisualStudioのステップイン実行で見ていくと Tryブロックの中のRedirectメソッドでエラーが起き Catchブロックに処理が移るようです。 実際、TryブロックのRedirect文を消したりコメントアウト したりするとちゃんとCatchブロックは飛ばしてくれます。 Redirectの飛び先もちゃんと存在していて原因がよく分かりません。 DataAdapterでUpdateするデータも正しいデータを入れていて ここが原因の可能性もないと思います。 Try-Catchの中でint型のフラグかなんか立てて後でifで振り分けてやればやりたい ことは出来るので問題はないのですが、なんか可読性悪くなるし何より釈然としない ので、何か分かる方教えていただけないでしょうか? try { sqlDataAdapter1.Update(dataSet3_1,"T0110"); Response.Redirect("WorkingMst0010.aspx"); //ここを消したりするとCatchに行かない } catch(Exception ex) { Session["ErrorCode"] = ex.Message.ToString(); Response.Redirect("WorkingMstError.aspx"); } | ||||
|
投稿日時: 2006-05-23 15:04
例外のスタックトレースとメッセージを見せてください
| ||||
|
投稿日時: 2006-05-23 15:04
例外の内容はなんなんでしょうか?
| ||||
|
投稿日時: 2006-05-23 15:18
何でも catch しちゃいけないって事ですね。
HttpResponse.Redirect のヘルプを見ていただくと分かりますが、ThreadAbortException をスローして以降の処理をふっ飛ばします。 _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-05-23 15:20
お返事ありがとうございます。
ex.StackTraceとex.Messageで出力されたメッセージは以下の通りです。 ごちゃごちゃしててすいません。 ex.StackTrace " at System.Threading.Thread.AbortInternal()\\r\\n at System.Threading.Thread.Abort(Object stateInfo)\\r\\n at System.Web.HttpResponse.End()\\r\\n at System.Web.HttpResponse.Redirect(String url, Boolean endResponse)\\r\\n at System.Web.HttpResponse.Redirect(String url)\\r\\n at WorkingMst0010.WebForm3.bt_insert_Click(Object sender, EventArgs e) in c:\\\\inetpub\\\\wwwroot\\\\workingmst0010\\\\workingmst0012.aspx.cs:line 452" string スレッドを中止しようとしました。 まだ初心者なのでよく分かりませんが、スレッドは使ってません。 ここで言うスレッドとは何の事なんでしょうか? | ||||
|
投稿日時: 2006-05-23 15:29
ここで言うスレッドはリクエストを処理しているスレッドですね。
RedirectはブラウザにHTTPステータスコード302を送って、ページを移動します。(たしか) そのため、ページのPageクラスのページを表示するための処理などが必要なくなるため、レスポンスを返して、即スレッドを終了させているのだと思われます。 | ||||
|
投稿日時: 2006-05-23 15:30
囚人さんの言うとおりヘルプを開いてみたところ
解説の部分に Redirect は End を呼び出し、これは完了時に ThreadAbortException 例外を生成します。 とありました。これはRedirectが成功しようが失敗しようが投げられる例外という事で いいんでしょうか・・・ | ||||
|
投稿日時: 2006-05-23 15:42
はい。 先ほども言いましたがどんな例外でも catch 出来る状況というのはないはずです。 エラーページに飛ばしたいなら、「カスタムエラーページ」を使った方が良いでしょう。 _________________ 囚人のジレンマな日々 |