从ASP.NET中的通用处理程序返回流

时间:2019-05-27 10:30:58

标签: asp.net vb.net webforms

因此,我想做的是向网页添加一个链接,单击该链接将调用一个通用处理程序,该处理程序将在内存中创建所需的数据并将其作为某种流返回给用户。 ,然后提示他们将其另存为文件。

所以,我们可能有: 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 个答案:

答案 0 :(得分:1)

问题在于jQuery的$.ajax方法从未打算触发文件下载。这是为了下载数据以供以后在JavaScript中处理。

您应将锚点的href属性直接指向处理程序。然后浏览器将注意到响应的content-disposition并处理文件下载。

<a href="makefile.ashx">Clickety</a>