Возврат потока из универсального обработчика в ASP.NET - PullRequest
0 голосов
/ 27 мая 2019

Итак, я хочу добавить ссылку на веб-страницу, которая при щелчке вызовет универсальный обработчик, который создаст необходимые данные в памяти и предоставит их пользователю в виде потока некоторого вида., которому затем предлагается сохранить его как файл.

ТАК, у нас может быть: Clickety

, а функция JavaSctipt makeme () просто

 function makeme() {
    $.ajax({
        url: 'makefile.ashx',
        cache: false
    }).done(function (response) {
       //alert(repsonse)
    }); 
 }

В обработчике я пробовал:

  Dim rtn As String = "1,2,3,4,5"
  Dim bArray As Byte() = System.Text.Encoding.Default.GetBytes(rtn.ToCharArray())
  ' or Dim mstream As New MemoryStream(bArray)   ‘ alt (see below)
  ' either of the next two lines
  context.Response.ContentType = "application/octet-stream"
  context.Response.ContentType = "application/force-download"
  context.Response.AddHeader("Content-Length", bArray.Length.ToString())
  context.Response.AddHeader("Content-Disposition", "filename.csv")
  context.Response.BinaryWrite(bArray)
  ' or context.Response.Write(mstream)           ‘ if alt used above

Кажется, ничего не происходит ....

еще проще, это:

  Dim rtn As String = "1,2,3,4,5"
  context.Response.Clear()
  context.Response.ContentType = "text/csv"
  context.Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv")
  context.Response.Write(rtn)

такжехотя при нажатии на ссылку ничего не происходит - я имею в виду, что обработчик вызывается, но это все.

1 Ответ

1 голос
/ 27 мая 2019

Проблема в том, что метод jQuery $.ajax никогда не был предназначен для запуска загрузки файла.Он предназначен для загрузки данных для последующей обработки в JavaScript.

Вы должны указать атрибут href привязки непосредственно на обработчик.Затем браузер заметит ответ content-disposition и обработает загрузку файла.

<a href="makefile.ashx">Clickety</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...