即使设置了 Content-Disposition,扩展名不正确的 XmlDocument 下载也是如此
XmlDocument downloads with incorrect extension even with Content-Disposition Set
我正在使用一种似乎非常标准的方法,使用内存流将 XmlDocument 下载到浏览器:
// Create document and root node
var dashboardXmlDoc = GetXml();
// Download the file
using (MemoryStream xmlMemoryStream = new MemoryStream())
{
using (XmlWriter writer = XmlWriter.Create(xmlMemoryStream))
{
writer.Flush();
dashboardXmlDoc.WriteTo(writer); // Write to memorystream
}
byte[] data = xmlMemoryStream.ToArray();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition:", "filename=samplefile.xml");
HttpContext.Current.Response.AppendHeader("Content-Length", data.Length.ToString());
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.BinaryWrite(data);
HttpContext.Current.Response.End();
}
除了文件没有指定的名称或扩展名外,一切似乎都运行良好...它以与运行此代码的 .apsx.cs 相对应的 .apsx 页面命名。
在某些方面与这个案例非常相似:
Change name of file sent to client?
虽然我正在使用内存流并处理 XML,并且已经设置了 Content-Disposition,所以给定的修复在这里不起作用(除非我不知何故做错了?)
我已经能够在浏览器中打开 XML 文档,但我认为一定可以在此处获得正确的文件名和扩展名。
我已经尝试将 ContentType 更改为 "text/xml",并尝试在 Content-Disposition header.[=13= 的文件名参数之前使用和不使用 "attachment;" ]
如果我可以提供更多代码或检查任何内容,请告诉我!
为了解决这个问题,我建议采取以下步骤(对我有用的):
- 删除
Content-Disposition
header 名称中的冒号 :
。
- 在
Content-Disposition
header 值中使用 attachment
。
- 将内容类型更改为
text/xml
。
样本:
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=samplefile.xml");
// ...
HttpContext.Current.Response.ContentType = "text/xml";
我正在使用一种似乎非常标准的方法,使用内存流将 XmlDocument 下载到浏览器:
// Create document and root node
var dashboardXmlDoc = GetXml();
// Download the file
using (MemoryStream xmlMemoryStream = new MemoryStream())
{
using (XmlWriter writer = XmlWriter.Create(xmlMemoryStream))
{
writer.Flush();
dashboardXmlDoc.WriteTo(writer); // Write to memorystream
}
byte[] data = xmlMemoryStream.ToArray();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition:", "filename=samplefile.xml");
HttpContext.Current.Response.AppendHeader("Content-Length", data.Length.ToString());
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.BinaryWrite(data);
HttpContext.Current.Response.End();
}
除了文件没有指定的名称或扩展名外,一切似乎都运行良好...它以与运行此代码的 .apsx.cs 相对应的 .apsx 页面命名。
在某些方面与这个案例非常相似:
Change name of file sent to client?
虽然我正在使用内存流并处理 XML,并且已经设置了 Content-Disposition,所以给定的修复在这里不起作用(除非我不知何故做错了?)
我已经能够在浏览器中打开 XML 文档,但我认为一定可以在此处获得正确的文件名和扩展名。
我已经尝试将 ContentType 更改为 "text/xml",并尝试在 Content-Disposition header.[=13= 的文件名参数之前使用和不使用 "attachment;" ]
如果我可以提供更多代码或检查任何内容,请告诉我!
为了解决这个问题,我建议采取以下步骤(对我有用的):
- 删除
Content-Disposition
header 名称中的冒号:
。 - 在
Content-Disposition
header 值中使用attachment
。 - 将内容类型更改为
text/xml
。
样本:
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=samplefile.xml");
// ...
HttpContext.Current.Response.ContentType = "text/xml";