我正在尝试根据请求发送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);
:" Stream不支持阅读。"
答案 0 :(得分:2)
您可能会收到错误,因为流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();