ファイルを送信することになっているページがあります
すべてのコードは、try / catch Exception ブロックで囲まれています
私は Response.TransmitFile を使用して実際にファイルを書き込みますが、失敗した場合 (私の場合は権限の問題が原因で)、クライアントへの応答は、エラーの詳細を示す自動生成された html であり、一部は次のように述べています:「ハンドルされていない例外が生成されました現在の Web リクエストの実行中です。」
未処理の例外と表示されるのはなぜですか?
ファイルが正常に処理された場合に設定されていたはずのオクテット ストリームではなく、ヘッダーが text/html に変更されたため、エラーが発生しました。しかし、TransmitFile の呼び出しは、独自のコンテンツを Response に書き込み、それをフラッシュするように見えますが、これは本当に望ましくありません!
私に何ができる?
try
{
String targetFile = Request.Form["filePath"];
if (targetFile == null) throw new Exception("No filename provided");
FileInfo file = new FileInfo(targetFile);
if (!file.Exists)
{
// file not found error
throw new Exception("File not found");
}
Response.ContentType = "APPLICATION/OCTET-STREAM";
Response.AppendHeader("Content-Disposition", "Attachment; Filename=\"" + Path.GetFileName(targetFile) + "\"");
Response.TransmitFile(file.FullName);
}
catch (Exception e)
{
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "text/html";
StringBuilder sb = new StringBuilder();
// I write my own response in sb - I never see this content sent back!!
Response.Write(sb.ToString());
Response.Flush();
}