0

在我的ASP.NET Web 窗体应用程序中,我必须让用户下载 XML 文件。为了做到这一点,当他们按下下载按钮时,会执行以下代码:

Response.Clear()
Response.CacheControl = "Private"
Response.Cache.SetExpires(DateTime.Now.AddMinutes(3))
Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1")
Response.ContentType = "text/xml"
Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}.xml", fileName))
Dim xmlFile As String = _xmlServices.GetXmlFile(fileId);

If Not String.IsNullOrEmpty(xmlFile) Then
    Dim xdoc As XmlDocument = New XmlDocument()
    xdoc.LoadXml(xmlFile)
    xdoc.Save(Response.Output)
End If

Response.Flush()
Response.End()

GetXmlFile(fileId)函数返回一个包含 XML 的字符串。获得的字符串已经具有指定的编码 ( <?xml version="1.0" encoding="ISO-8859-1"?>) 和签名。这意味着如果文件被修改,签名将不再有效。

GetXmlFile(fileId)我对WPF 应用程序使用相同的功能,它运行良好。

然而,在我的 ASP.NET 应用程序中,我有两个问题:

  1. 如果我没有明确指定Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1")下载的 XML 文件有编码<?xml version="1.0" encoding="UTF-8"?>。这不是一个大问题。

  2. 从ASP.NET 应用程序下载的 XML 文件比从WPF 应用程序下载的文件多一个回车符。这些文件可能看起来与解析相同,因为回车出现在标记的末尾,而不会影响数据。但签名无效,因为文件在放置后已更改。

因此,我认为Response.Output流以某种方式修改了文件。或者这个错误背后可能有另一个原因?

4

0 回答 0