保存webrequest返回的流对象

Aln*_*dru 1 c#

我有一个代码从网站上检索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);
    }
 }
Run Code Online (Sandbox Code Playgroud)

但我调试了应用程序,似乎我失去了这行代码的所有内容,所以我没有任何东西可以保存.

Stream responseStream = webResponse.GetResponseStream())
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样吗?

如果我调查对象,我会看到:

Length ='responseStream.Length'引发类型'System.NotSupportedException'的异常

错误如下:

找不到文件'C:\ Documents and Settings\user\My Documents\Visual Studio 2010\Projects\Proto\App\bin\Debug\System.Net.ConnectStream'.

Jon*_*eet 5

这就是问题:

reportXML = XDocument.Load(responseStream.ToString());
Run Code Online (Sandbox Code Playgroud)

调用ToString()这样的流几乎不会给你任何有用的东西.如果您只想加载流的内容,请删除ToString调用:

reportXML = XDocument.Load(responseStream);
Run Code Online (Sandbox Code Playgroud)

或者,如果您真的只想将其保存到磁盘,那么首先只需使用Stream.CopyTo并且不要将其解析为XML.