在ASP.NET中正确使用Response.Write()

ash*_*rya 1 .net c# asp.net

我试图在用户访问页面时强制下载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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到一个问题,我的下载窗口无限期挂起,没有完成下载/打开文件.

我究竟做错了什么?我不会在这里处理任何物品或关闭任何连接吗?

Uwe*_*eim 7

我已回复类似的问题.引用自己:

只是对其他答案的一小部分补充.在下载的最后,我执行:

context.Response.Flush();
context.ApplicationInstance.CompleteRequest();
Run Code Online (Sandbox Code Playgroud)

我了解到,否则,下载有时无法成功完成.

这谷歌群组中张贴还指出,Response.End将引发ThreadAbortException你可以通过使用避免CompleteRequest方法.

  • 完美有效的答案 (3认同)