我有一段代码可以从站点检索 XML 文件,所以我按如下方式操作:
WebRequest request = WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "text/xml";
using (WebResponse webResponse = request.GetResponse())
{
using (Stream responseStream = webResponse.GetResponseStream())
{
if (responseStream != null)
{
reportXML = XDocument.Load(responseStream.ToString());
}
}
using (XmlWriter writer = XmlWriter.Create(@"C:\Retrieved.xml"))
{
reportXML.Save(writer);
}
}
但是我调试了应用程序,似乎我失去了这行代码中的所有内容,所以我没有什么可以保存的了。
Stream responseStream = webResponse.GetResponseStream())
知道为什么会这样吗?
如果我调查这个对象,我会看到这个:
Length = 'responseStream.Length' threw an exception of type 'System.NotSupportedException'
错误如下:
Could not find file 'C:\Documents and Settings\user\My Documents\Visual Studio 2010\Projects\Proto\App\bin\Debug\System.Net.ConnectStream'.
最佳答案
问题是:
reportXML = XDocument.Load(responseStream.ToString());
像这样在流上调用 ToString()
几乎永远不会给您任何有用的东西。如果您只想加载流的内容,请去掉 ToString
调用:
reportXML = XDocument.Load(responseStream);
或者,如果您真的只想将它保存到磁盘,只需使用Stream.CopyTo
即可。并且首先不要费心将其解析为 XML。
关于c# - 保存 webrequest 返回的流对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13567254/