我试图在用户访问页面时强制下载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();
}
}
我遇到的问题是我的下载窗口无限期挂起,没有完成下载/打开文件。
我做错了什么?我不会在这里处理任何物品或关闭任何连接吗?
答案 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()
代替Flush
和Close
这就是我过去一直在使用的。
答案 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);