根据请求发送 XML 文件

本文关键字:XML 文件 请求 | 更新日期: 2023-09-27 18:31:58

我正在尝试根据请求发送 XML 文件,但是当我尝试将正在将文件加载到的流复制到输出流时出现错误。

现在,如果我从浏览器发出请求(顺便说一句,我使用HttpListener),它就可以正常工作;它向我显示我的.xml很好。但我也希望在提出请求时能够下载.xml。

有什么建议吗?

    string xString = @"C:'Src'Capabilities.xml";
    XDocument capabilities = XDocument.Load(xString);
    Stream stream = response.OutputStream;
    response.ContentType = "text/xml";
    capabilities.Save(stream);
    CopyStream(stream, response.OutputStream);
    stream.Close();

    public static void CopyStream(Stream input, Stream output)
    {
        input.CopyTo(output);
    }

我得到的错误是input.CopyTo(output);:"流不支持阅读。

根据请求发送 XML 文件

您可能会收到错误,因为流input实际上是response.OutputStream,这是一个输出流,并且还使复制操作的源和目标成为相同的流 - 嗯?

本质上,您的代码现在做了什么(这是错误的):您将 XML 内容保存到响应的输出流(实际上已经将其发送到浏览器)。然后,您尝试将输出流复制到输出流中。这不起作用,即使它起作用 - 为什么?您已写入输出流。

在我看来,您可以大大简化所有这些,如下所示:

// Read the XML text into a variable - why use XDocument at all?
string xString = @"C:'Src'Capabilities.xml";
string xmlText = File.ReadAllText(xString);
// Create an UTF8 byte buffer from it (assuming UTF8 is the desired encoding)
byte[] xmlBuffer = Encoding.UTF8.GetBytes(xmlText);
// Write the UTF8 byte buffer to the response stream
Stream stream = response.OutputStream;
response.ContentType = "text/xml";
response.ContentEncoding = Encoding.UTF8;
stream.Write(xmlBuffer, 0, xmlBuffer.Length);
// Done
stream.Close();