在ASP.NET中正确使用Response.Write()
我试图在用户访问页面时强制下载XML文件。
这是我正在使用的代码
public partial class GenerateTemplate : LayoutsPageBase { protected void Page_Load(object sender, EventArgs e) { //............. //Going about generating my XML //............. Response.ClearContent(); Response.AddHeader("content-disposition", "attachment; filename=template.xml"); Response.Write(xmlDoc.InnerXml); Response.Flush(); Response.Close(); } }
我遇到的问题是我的下载窗口无限期挂起,没有完成文件的下载/打开。
我究竟做错了什么? 我不会在这里处理任何物品或关闭任何连接吗?
我发布了对类似问题 的回复 。 引用自己:
只是对其他答案的一小部分补充。 在下载的最后,我执行:
context.Response.Flush(); context.ApplicationInstance.CompleteRequest();
我了解到,否则,下载有时无法成功完成。
此Google网上论坛post还指出, Response.End
会抛出一个ThreadAbortException
,您可以使用CompleteRequest
方法避免这种情况。
尝试使用Response.End()
而不是Flush
和Close
这就是我过去一直在使用的东西。
您是否尝试过设置内容类型并调用Response.End()
:
protected void Page_Load(object sender, EventArgs e) { //............. //Going about generating my XML //............. Response.Clear(); Response.ContentType = "text/xml"; Response.AddHeader("Content-Disposition", "attachment; filename=template.xml"); Response.Write(xmlDoc.InnerXml); Response.End(); }
你说你想要一个文件下载使用asp.net web表单你会这样做:
context.Response.ContentType = //MIME type // Set the filename context.Response.AddHeader("content-disposition", "attachment;filename=" + queryFile); // Stream the file to the client context.Response.WriteFile(file);