在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()而不是FlushClose

这就是我过去一直在使用的东西。

您是否尝试过设置内容类型并调用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);