- PR -

Response.Flush()の後にResponse.Redirect()すると例外が発生

1
投稿者投稿内容
まめぞう
常連さん
会議室デビュー日: 2007/02/09
投稿数: 21
投稿日時: 2007-08-17 18:41
asp.net2.0で開発しています。

件名のとおり、Response.Flush()の後にResponse.Redirect()すると例外が発生してしまいます。このような場合の回避策はありますか?
Response.Flush()した内容を取り消し、とかできるものなのですか?
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-08-17 18:47
Redirect するのに Flush する意味が何かありますか?
いのまた
会議室デビュー日: 2003/07/08
投稿数: 5
投稿日時: 2007-08-18 15:25
「Response.Flush()しない」以外の回避策は無いと思います。

Response.Redirect()は、HTTP応答のステータスコードを302にし、HTTPヘッダにリダイレクト先URLを設定します。

ところが、Response.Flush()を先に実行していると、HTTPヘッダを含むHTTP応答はクライアントに送信し始めています。この状態ではもう取り消しが効かないので例外となるわけです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-08-18 21:27
引用:

いのまたさんの書き込み (2007-08-18 15:25) より:
「Response.Flush()しない」以外の回避策は無いと思います。

Response.Redirect()は、HTTP応答のステータスコードを302にし、HTTPヘッダにリダイレクト先URLを設定します。

ところが、Response.Flush()を先に実行していると、HTTPヘッダを含むHTTP応答はクライアントに送信し始めています。この状態ではもう取り消しが効かないので例外となるわけです。


違うでしょう。リダイレクトすると、握りつぶせない例外、スレッド中断の例外が、かならず発生します。

半年に一回くらい、質問が上がっていると思います。因みに、MSDNに、発生すると書いてあります。
_________________
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-08-19 01:12
>違うでしょう。リダイレクトすると、握りつぶせない例外、スレッド中断の例外が、かならず発生します。

いや、それはわかった上で、

>ところが、Response.Flush()を先に実行していると、HTTPヘッダを含むHTTP応答はクライアントに送信し始めています。この状態ではもう取り消しが効かないので例外となるわけです。

こっちの話ではないですかね?

>Response.Flush()の後にResponse.Redirect()すると例外が発生してしまいます。
だそうなので。

ちなみにMSDNでは、
HttpException
HTTP ヘッダーが送信された後にリダイレクトしようとしました。
と書かれています。

まあ、どんな例外がとか、詳細は書くようにしたほうがいいですよ、と。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-08-20 22:11
引用:

いや、それはわかった上で、

>ところが、Response.Flush()を先に実行していると、HTTPヘッダを含むHTTP応答はクライアントに送信し始めています。この状態ではもう取り消しが効かないので例外となるわけです。

こっちの話ではないですかね?

>Response.Flush()の後にResponse.Redirect()すると例外が発生してしまいます。
だそうなので。


 え?ThreadAbortException ではなく?確かに「Response.Flush()の後にResponse.Redirect()すると」って表現が気になってはいたのですが。

↓こんな感じ?
コード:
try {
    ...
    Response.Flush();
    Response.Redirect(...);
} catch (ThreadAbortException ex) {
    // こいつは無視
} catch (Exception ex) {
    // ここにきちゃうよ!!
}



これは、大変失礼しました>いのまたさん
1

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