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();
  }

Ошибка:

Невозможно оценить выражение, поскольку код оптимизирован или собственный фрейм находится поверх стека вызовов.


person tier1    schedule 17.01.2012    source источник
comment
удалите конец и попробуйте Responce.Flush() и Responce.ApplicationInstance.CompleteRequest();   -  person Aristos    schedule 17.01.2012
comment
Хороший вызов, который остановил исключение. Но код по-прежнему завершается без каких-либо действий в браузере. ??   -  person tier1    schedule 17.01.2012


Ответы (2)


Попробуйте изменить его на .

 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();
person Ashwin Chandran    schedule 17.01.2012
comment
То же, что и раньше, выполняет код и выдает исключение в Response.End(). Кажется странным, что Response.TransmitFile выполняется нормально, но файл не передается? - person tier1; 17.01.2012
comment
@Ashwin: я пробую это решение в своем файле кода программной части (моя проблема: stackoverflow.com/questions/18599735/downloading-a-dynamic-file), но независимо от того, где я пытаюсь вызвать TransmitFile() или WriteFile(), я получаю исключение: Сервер не может установить тип содержимого после Заголовки HTTP отправлены. Есть предложения? - person Codes with Hammer; 05.09.2013
comment
Response.End() генерирует исключение по своей природе. - person yazanpro; 07.05.2014
comment
Это сработало для нашего приложения, которое использует этот метод, чтобы позволить пользователям загружать файлы .svg. - person ahwm; 26.01.2016
comment
Response.Clear(); такой же, как Response.ClearContent(); Почему оба? - person Trisped; 16.07.2016
comment
Можно ли это сделать с файловым потоком? Пользователь выбирает место для сохранения, а затем мы передаем файл в это место? - person bgmCoder; 06.06.2017
comment
как использовать это в asp webapi? - person Andreas; 20.12.2017

Просто небольшое дополнение к приведенному выше решению, если у вас возникли проблемы с именем загруженного файла...

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

Это вернет точное имя файла, даже если оно содержит пробелы или другие символы.

person E Malik    schedule 25.07.2013