【问题标题】:Problems encoding string data that contains percent sign编码包含百分号的字符串数据时出现问题
【发布时间】:2012-12-28 20:17:01
【问题描述】:

我正在做一个项目,我必须通过 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 请求吗?在保留产品名称的同时,我可以做些什么来解决?

已更正 - 现在可以使用了。谢谢

谢谢

【问题讨论】:

  • 请显示导致错误的输入...您真的必须使用字符串连接构造 XML 吗? :( .
  • 我已经添加了所有我可以显示的 XML,而不会泄露敏感信息......希望它足够了。我不通过 concat 构造 XML 字符串,我只是将第一行添加到字符串中。我使用 XDocument 并有一个基本 XML,我用数据填写字段

标签: c# encoding httpwebrequest


【解决方案1】:

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

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

还有大量示例如何正确构建此类请求。 IE。 C# web request with POST encoding question

【讨论】:

  • 我已经修改了代码。我有点明白你在说什么。但是,使用 System.Web.HttpUtility.URLEncode(data) 仍然无法正常工作。
  • 样本中的代码已修复。现在更有意义? @alexei
  • @Encryption,样本现在看起来不错。请考虑不将 XML 作为字符串传递...您可能会遇到问题...
猜你喜欢
  • 2014-04-22
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
  • 2020-04-22
  • 2021-12-30
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多