DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ファイルダウンロード時の例外対処

分類:[ASP.NET]

2010/04/07(Wed) 17:31:08 編集(投稿者)
2010/04/07(Wed) 17:30:26 編集(投稿者)
2010/04/07(Wed) 17:30:19 編集(投稿者)

ASP.NET3.5(VB.NET)でファイルのダウンロード機能を追加しております。
例外発生時の対処で困っております。。。
ダウンロードするファイルのパスが誤っていたりした場合等のために、Try〜Catchで処理を囲んでおり、
例外が発生した場合には、例外内容を表示するページに移動するようにコーディングしております。
※例外内容を表示するページに移動するのは仕様です。

例外が発生し、Response.Redirectで例外内容を表示するページに移動する際に以下のエラーが発生し、ページ遷移できません。

「HTTPヘッダーを送信後はリダイレクトできません。」


Try
  Response.ClearContent()
  Response.Buffer = True
  Response.ContentType = "application/octet-stream"
  Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("ファイル.txt"))
  Response.Flush()
  Response.WriteFile("ダウンロードファイルのフルパス") ←※ここで存在しないパスを指定して落とす
  Response.End()
Catch ex As ThreadAbortException
  'Response.End()で必ず発生するので、何もしない
Catch ex As Exception
  Dim errobj As New ErrorObject
  errobj.Message = _messageHelper.GetMessage(_sessionContext, "1181")
  errobj.Number = Err.Number
  errobj.Description = Err.Description
  errobj.Source = Err.Source
  Session("ErrorObject") = errobj
  Response.Redirect("例外内容表示ページ.aspx")←★
End Try


この場合の回避策は何かございませんでしょうか。
ご教授お願いいたします。
■No26678に返信(Web素人さんの記事)

>「HTTPヘッダーを送信後はリダイレクトできません。」

ヘッダー送信を遅らせてみてはいかがでしょうか。
Response.Flush() をコメントアウトすると善いかと思います。

Response.AddHeader(...)
' Response.Flush()
Response.WriteFile(...)
Response.End()
■No26682に返信(もりおさんの記事)
> ■No26678に返信(Web素人さんの記事)
>
> >「HTTPヘッダーを送信後はリダイレクトできません。」
>
> ヘッダー送信を遅らせてみてはいかがでしょうか。
> Response.Flush() をコメントアウトすると善いかと思います。
>
> Response.AddHeader(...)
> ' Response.Flush()
> Response.WriteFile(...)
> Response.End()
>

ご返答ありがとうございます。
上記のご指摘を反映させたところ、実装することができました。
また機会がありましたら、よろしくお願いいたします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板