0

我正在开发一个项目,我必须通过 XML 字符串中的 HTTP POST 将产品信息发送到 Web 服务器。事实证明,某些产品名称的名称中可能带有 % 符号,例如“.05% Topical Cream”。每当我尝试发送产品名称中包含 % 符号的 XML 数据时,我都会收到错误消息,因为在对 XML 字符串数据进行编码时,百分号会导致数据格式不正确。

如何安全地编码和发送带有 % 登录产品名称的 XML 字符串数据?

XML 数据:

<node>
      <product>
        <BrandName>amlodipine besylate (bulk) 100 % Powder</BrandName>
      </product>
  </node>

网页请求代码:

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 请求吗?在保持产品名称的同时,我可以做些什么来解决?

已更正 - 现在正在工作。谢谢

谢谢

4

1 回答 1

1

您需要正确构建请求。application/x-www-form-urlencoded表示每个参数都是 Url 编码的。在您的情况下xml,参数必须具有正确编码的值,而不仅仅是盲目连接。下面是应该让你盯着看的示例......希望你能够避免字符串连接来构造 XML(以及用原始代码中的引号构造字符串常量的疯狂方式):

var parameterValue = System.Web.HttpUtility.UrlEncode("<xml>" + data);
byte[] bytes = Encoding.UTF8.GetBytes("xml=" + parameterValue);

还有很多示例如何正确构建此类请求。即带有 POST 编码问题的 C# Web 请求

于 2012-12-28T20:45:36.617 回答