web-dev-qa-db-ja.com

ASP.Netクライアントブラウザへのファイルのダウンロード

ボタンクリックでテキストファイルをブラウザーにダウンロードする簡単なテストページを作成しています。今まで見たことのない、本当に奇妙なエラーが出ています。何かご意見は?

エラーは「Response.End();」で発生しますそして、ファイルはクライアントブラウザに到達しません

コード:

  string filePath = "C:\\test.txt";
  FileInfo file = new FileInfo(filePath);
  if (file.Exists)
  {
    Response.ClearContent();
    Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
    Response.AddHeader("Content-Length", file.Length.ToString());
    Response.ContentType = "text/plain";
    Response.TransmitFile(file.FullName);
    Response.End();
  }

エラー:

コードが最適化されているか、ネイティブフレームが呼び出しスタックの上にあるため、式を評価できません。

19
tier1

に変更してみてください。

 Response.Clear();
 Response.ClearHeaders();
 Response.ClearContent();
 Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
 Response.AddHeader("Content-Length", file.Length.ToString());
 Response.ContentType = "text/plain";
 Response.Flush();
 Response.TransmitFile(file.FullName);
 Response.End();
34
Ashwin Chandran

ダウンロードしたファイルの名前に問題がある場合は、上記のソリューションにわずかに追加するだけです...

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + file.Name + "\"");

スペースやその他の文字が含まれている場合でも、これにより正確なファイル名が返されます。

8
Nashe