即使设置了 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";