我需要将原始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写入请求流?
答案 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中的一种技术将其复制到响应流。