在ASP.NET中将文本下载为文件

我试图从屏幕下载一些文本输出作为文本文件。 以下是代码。 它在某些页面上工作,而在其他页面上根本不工作。 任何人都可以建议这里有什么问题吗?

protected void Button18_Click(object sender, EventArgs e){ Response.Clear(); Response.Buffer = true; Response.ContentType = "text/plain"; Response.AppendHeader("content-disposition", "attachment;filename=output.txt"); StringBuilder sb = new StringBuilder(); string output = "Output"; sb.Append(output); sb.Append("\r\n"); Response.Write(sb.ToString()); } 

正如Joshua已经提到的,您需要将文本写入输出流(Response)。 另外,不要忘记在此之后调用Response.End()。

 protected void Button18_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); string output = "Output"; sb.Append(output); sb.Append("\r\n"); string text = sb.ToString(); Response.Clear(); Response.ClearHeaders(); Response.AppendHeader("Content-Length", text.Length.ToString()); Response.ContentType = "text/plain"; Response.AppendHeader("Content-Disposition", "attachment;filename=\"output.txt\""); Response.Write(text); Response.End(); } 

编辑1:添加更多细节

编辑2:我正在阅读其他SOpost,用户建议在文件名周围加上引号:

 Response.AppendHeader("content-disposition", "attachment;filename=\"output.txt\""); 

资料来源: https : //stackoverflow.com/a/12001019/558486

如果这是您的实际代码,您永远不会将文本写入响应流,因此浏览器永远不会收到任何数据。

至少,你应该需要

 Response.Write(sb.ToString()); 

将文本数据写入响应。 此外,作为额外的好处,如果您事先知道长度,则应使用Content-Length标头提供它,以便浏览器显示下载进度。

你也设置Response.Buffer = true; 作为方法的一部分但从未显式刷新响应以将其发送到浏览器。 尝试在write语句后添加Response.Flush()