File ASP.NET中的Response.Output是否修改流中文件的编码?

File ASP.NET中的Response.Output是否修改流中文件的编码?,file,encoding,stream,response,File,Encoding,Stream,Response,在我的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 = "

在我的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的字符串。获取的字符串已具有指定的编码(
)和签名。这意味着,如果文件被修改,签名将不再有效

对于WPF应用程序,我使用了相同的函数
GetXmlFile(fileId)
,它工作得非常好

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

  • 如果我没有明确指定
    Response.ContentEncoding=
    Encoding.GetEncoding(“ISO-8859-1”)
    下载的XML文件具有编码。这不是什么大问题

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


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

    为什么不改为使用Response.TransmitFile,使其与存储在服务器上的文件完全相同?如何将其与XmlDocument对象结合使用?啊哈,对不起,我看到了调用_licenseServices.GetXmlFile,并认为它实际上是硬盘上的文件不,它是动态生成的文件:-)