如何在硬盘上将XML写入GetRequestStream

时间:2009-10-07 15:38:27

标签: c# .net post httpwebrequest

我需要将原始xml发布到站点并阅读响应。使用以下代码,我不断收到“未知文件格式”错误,我不确定原因。

            XmlDocument sampleRequest = new XmlDocument();
            sampleRequest.Load(@"C:\SampleRequest.xml");
            byte[] bytes = Encoding.UTF8.GetBytes(sampleRequest.ToString());

            string uri = "https://www.sample-gateway.com/gw.aspx";
            req = WebRequest.Create(uri);
            req.Method = "POST";
            req.ContentLength = bytes.Length;
            req.ContentType = "text/xml";

            using (var requestStream = req.GetRequestStream())
            {
                requestStream.Write(bytes, 0, bytes.Length);
            }

            // Send the data to the webserver
            rsp = req.GetResponse();

            XmlDocument responseXML = new XmlDocument();
            using (var responseStream = rsp.GetResponseStream())
            {
                responseXML.Load(responseStream);
            }

我相当肯定我的问题是我在写什么/如何写到requestStream所以..

如何修改该代码,以便我可以将硬盘驱动器上的xml写入请求流?

2 个答案:

答案 0 :(得分:2)

确定而不是做sampleRequest.ToString(),你应该使用sampleRequest.OuterXml,这样做会有魔力,你发送的是“System.Xml.XmlDocument”而不是Xml

    XmlDocument sampleRequest = new XmlDocument();
    sampleRequest.Load(@"C:\SampleRequest.xml");
    //byte[] bytes = Encoding.UTF8.GetBytes(sampleRequest.ToString());
    byte[] bytes = Encoding.UTF8.GetBytes(sampleRequest.OuterXml);

答案 1 :(得分:0)

两件事:

首先,每当您尝试使用HTML响应诊断问题时,都应该始终检查响应流实际包含的内容。如果你在这种情况下,你会看到它包含System.Xml.XmlDocument,它会立即告诉你什么是错的。

其次,在具有任何类型事务量的应用程序中,在将其放入响应流之前,您不希望将静态XML文件加载到XmlDocument中;你的程序花费时间和内存构建你不需要的东西。 (它甚至比你的情况更糟;你的方法不仅将XML解析为DOM对象,而且当你将它编码为UTF-8时,它会对其OuterXml属性进行内存中的复制。你真的需要这样做吗?)相反,你应该创建一个FileStream对象,并使用this answer中的一种技术将其复制到响应流。