对包含百分号的字符串数据进行编码时出现问题



我正在做一个项目,我必须通过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编码问题

相关内容

  • 没有找到相关文章

最新更新