繁体   English   中英

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

[英]Correct usage of Response.Write() in 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();
    }
}

我遇到一个问题,我的下载窗口无限期地挂起,而从未完成文件的下载/打开。

我究竟做错了什么? 我在这里没有布置任何对象或关闭任何连接吗?

我已经发布类似问题 的答复 引用我自己:

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

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

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

此Google网上论坛帖子还指出, Response.End引发ThreadAbortException ,您可以通过使用CompleteRequest方法来避免这种情况。

尝试使用Response.End()而不是Flush and 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM