Base64编码XML以发布到Web服务

时间:2014-05-06 15:08:54

标签: c# .net xml base64

我在C#.NET中编写一个服务,它接收一些数据,生成XML字符串,并将其发布到Web服务。

我的工作正常,但现在我想在C#端对64位进行编码,并在Web服务端用PHP解码。

出现问题,因为解码在PHP端没有按预期工作

在PHP方面,我只是做

$xml = trim(base64_decode($_POST['xmlpost']));

从webservice到webservice可以正常工作。

这是C#代码:

string xml = ###XMLHERE###;
WebRequest request = (HttpWebRequest)WebRequest.Create(liveURL);

//base 64 encode
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(xml);
string byteArrayEncoded = System.Convert.ToBase64String(plainTextBytes, 0, plainTextBytes.Length);

byte[] byteArray = Encoding.UTF8.GetBytes("xmlpost=" + byteArrayEncoded + "&test=1");

//send request
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Method = "POST";
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();

我知道XML格式是正确的,因为它没有编码就可以正常工作。我做错了什么?

旁注:在我修复此问题后,我还尝试确保单引号,双引号和&符号可以在XML节点文本中,如果有人也可以帮助我。

enter image description here

1 个答案:

答案 0 :(得分:1)

base64编码使用+,/和=等字符,必须在URL编码的表单数据中进行转义。这样的事情可以为你带来更好的结果。

string byteArrayEncoded = System.Convert.ToBase64String(plainTextBytes, 0, plainTextBytes.Length);
string byteArrayUrlEncoded = System.Web.HttpUtility.UrlEncode(byteArrayEncoded);
byte[] byteArray = Encoding.UTF8.GetBytes("xmlpost=" + byteArrayUrlEncoded + "&test=1");