- PR -

ASPのResponse.Redirectについて

投稿者投稿内容
Qoo
常連さん
会議室デビュー日: 2006/05/18
投稿数: 37
投稿日時: 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");
}
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2006-05-23 15:04
例外のスタックトレースとメッセージを見せてください
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-05-23 15:04
例外の内容はなんなんでしょうか?
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-05-23 15:18
何でも catch しちゃいけないって事ですね。
HttpResponse.Redirect のヘルプを見ていただくと分かりますが、ThreadAbortException をスローして以降の処理をふっ飛ばします。
_________________
囚人のジレンマな日々
Qoo
常連さん
会議室デビュー日: 2006/05/18
投稿数: 37
投稿日時: 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

スレッドを中止しようとしました。

まだ初心者なのでよく分かりませんが、スレッドは使ってません。
ここで言うスレッドとは何の事なんでしょうか?
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-05-23 15:29
ここで言うスレッドはリクエストを処理しているスレッドですね。
RedirectはブラウザにHTTPステータスコード302を送って、ページを移動します。(たしか)
そのため、ページのPageクラスのページを表示するための処理などが必要なくなるため、レスポンスを返して、即スレッドを終了させているのだと思われます。
Qoo
常連さん
会議室デビュー日: 2006/05/18
投稿数: 37
投稿日時: 2006-05-23 15:30
囚人さんの言うとおりヘルプを開いてみたところ
解説の部分に
Redirect は End を呼び出し、これは完了時に ThreadAbortException 例外を生成します。

とありました。これはRedirectが成功しようが失敗しようが投げられる例外という事で
いいんでしょうか・・・
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-05-23 15:42
引用:

とありました。これはRedirectが成功しようが失敗しようが投げられる例外という事で
いいんでしょうか・・・


はい。

先ほども言いましたがどんな例外でも catch 出来る状況というのはないはずです。
エラーページに飛ばしたいなら、「カスタムエラーページ」を使った方が良いでしょう。
_________________
囚人のジレンマな日々

スキルアップ/キャリアアップ(JOB@IT)