我正在从网站下载文字,我想让用户能够将其保存为文件。所以,我有以下代码可以做到这一点。
protected void DownloadFile(string fileName, string content)
{
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.ContentType = "text/plain";
Response.Write(content);
Response.End();
}
我遇到的问题是在此代码运行后出现异常。我相信这是因为我调用了Response.End()。因此,每次用户下载文件时,它都会将其重定向到通用错误页面,因为所有通用异常都会重定向到该页面。
关于如何将文本写入文件而不是出现此错误的任何想法?如果我删除Response.End()我得到我的文本,然后是其余的HttpResponse文本,但我没有得到错误。
感谢。
答案 0 :(得分:1)
首先,如果此代码在.ASPX文件中,则需要将其移出到.ASHX文件。
其次,在你转移到.ASHX后,你可以简单地写入输出流并完成,你不应该需要Response.End();
这是我开始使用的链接:http://dotnetperls.com/ashx-handler - 没有太多内容。它只是删除了一堆asp.net“页面”开销。
理想情况下,您应该有一个包含列表的页面,以及“download.ashx”文件的链接/按钮。然后在查询字符串上传递一个记录ID,以便它可以执行查找和响应.write调用。
答案 1 :(得分:0)
也许你想打电话给Response.Output.Write()
?
答案 2 :(得分:0)
请勿致电Response.End()
。在填写标题之后,无论您是否打算,仍然存在要在服务器端运行的代码。而是考虑使用Response.Flush()
并允许页面完成。另一种方法是使用HttpHandler(ashx)文件而不是aspx / ascx文件。这将为您提供对响应的更基本访问,因此您应该能够在没有反响的情况下结束。