我正在做一个项目,我必须通过HTTP POST在XML字符串发送产品信息到web服务器。事实证明,某些产品名称中可能有一个%符号,例如"。05%局部面霜"。每当我尝试发送在产品名称中包含%符号的XML数据时,我都会得到一个明显的错误,因为在编码XML字符串数据时,%符号会导致数据格式错误。
我如何编码和发送XML字符串数据与%在产品名称签名安全?
XML数据:<node>
<product>
<BrandName>amlodipine besylate (bulk) 100 % Powder</BrandName>
</product>
</node>
Web请求代码:
public string MakeWebServerRequest(string url, string data)
{
var parms = System.Web.HttpUtility.UrlEncode(data);
byte[] bytes = Encoding.UTF8.GetBytes("xml=" + parms);
string webResponse = String.Empty;
try
{
System.Web.HttpUtility.UrlEncode(data);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bytes.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.WriteTimeout = 3000;
reqStream.Write(bytes, 0, bytes.Length);
reqStream.Close();
}
using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
{
using (StreamReader rdr = new StreamReader(response.GetResponseStream()))
{
webResponse = rdr.ReadToEnd();
rdr.Close();
}
response.Close();
}
}
我应该创建不同的web请求吗?在保持产品名称的同时,我可以做些什么来解析?
已更正-正在工作。由于
谢谢
您需要正确地构造请求。application/x-www-form-urlencoded
表示每个参数都是url编码的。在这种情况下,xml
参数必须具有正确编码的值,而不仅仅是盲目地连接。下面的例子应该会给你一些启发……希望您能够避免使用字符串连接来构造XML(以及原始代码中使用引号构造字符串常量的疯狂方式):
var parameterValue = System.Web.HttpUtility.UrlEncode("<xml>" + data);
byte[] bytes = Encoding.UTF8.GetBytes("xml=" + parameterValue);
也有很多关于如何正确构造这类请求的示例。例如c# web请求带有POST编码问题