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

时间:2011-01-03 09:02:16

标签: c# asp.net .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();
    }
}

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

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

4 个答案:

答案 0 :(得分:7)

我已将a reply发布到a similar question。引用自己:

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

context.Response.Flush();
context.ApplicationInstance.CompleteRequest();

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

This Google Groups posting还指出,Response.End会引发ThreadAbortException,您可以使用CompleteRequest方法避免使用{{1}}。

答案 1 :(得分:2)

尝试使用Response.End()代替FlushClose

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

答案 2 :(得分:0)

您是否尝试过设置内容类型并致电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();
}

答案 3 :(得分:-2)

你说你想要一个文件下载使用asp.net网络表单你可以这样做:

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);