简体   繁体   中英

How to post non-standard XML with C#

I have utilities that post standard XML, but am faced with interacting with a server that requires something I'm not familiar with.

The expected XML format is like this:

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

When I post using my standard method:

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);

I get an error message about the XML not being formatted correctly.

When I use some stuff I've found:

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();

the response seems to indicate success, but no response content as expected.

I suspect it has something to do with the "xmldata=" at the beginning of the request, but cannot be sure.

Any suggestions?

Judging from the xmldata= , it sounds like the API wants the data sent as form-urlencoded . I suggest trying this:

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

and this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM