如何使用C#发布非标准XML

时间:2014-01-12 17:37:10

标签: c# xml

我有发布标准XML的实用程序,但面对与需要我不熟悉的服务器的交互。

预期的XML格式如下:

"xmldata=<txn><element_1>element_1_value</element_1><element_2>element_2_value</element_2></txn>"

当我使用我的标准方法发布时:

byte[] data = Encoding.ASCII.GetBytes(XDocumentToString(xml));

var client = new WebClient();
client.Headers.Add("Content-Type", "text/xml");
byte[] result = client.UploadData(new Uri(url), "POST", data);

string resultString = Encoding.ASCII.GetString(result);
return XDocument.Parse(resultString);

我收到有关XML格式不正确的错误消息。

当我使用我发现的一些东西时:

var request = _requestFactory.CreateCreditCardSaleRequest(xmlStringFromAbove);
WebRequest webRequest = WebRequest.Create("https://domain.com/process_some_xml.do");
webRequest.Method = "POST";

byte[] byteArray = Encoding.UTF8.GetBytes(request);
// Set the ContentType property of the WebRequest.
webRequest.ContentType = "text/xml; encoding='utf-8'";
// Set the ContentLength property of the WebRequest.
webRequest.ContentLength = byteArray.Length;
// Get the request stream.
Stream dataStream = webRequest.GetRequestStream();
// Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.
// dataStream.Close();
// Get the response.
WebResponse response = webRequest.GetResponse();
// Display the status.
var httpWebResponse = (HttpWebResponse) response;
Console.WriteLine(httpWebResponse.StatusDescription);
// Get the stream containing content returned by the server.
dataStream = response.GetResponseStream();

响应似乎表明成功,但没有预期的响应内容。

我怀疑它与请求开头的“xmldata =”有关,但无法确定。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

xmldata=判断,听起来API希望将数据发送为form-urlencoded。我建议试试这个:

string dataStr = "xmldata=" + HttpUtility.UrlEncode(XDocumentToString(xml));
byte[] data = Encoding.ASCII.GetBytes(dataStr);

和此:

client.Headers.Add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");