【问题标题】:c# Sending requst with special characters interferes the stringc#发送带有特殊字符的请求会干扰字符串
【发布时间】:2013-01-01 16:16:38
【问题描述】:

我从一个解决方案中的项目向另一个项目发送请求:

WebRequest request = WebRequest.Create(UrlTemplate);
request.Timeout = 500000;
request.Method = WebRequestMethods.Http.Post;
request.ContentType = ContentType;
byte[] postData = System.Text.Encoding.ASCII.GetBytes(data);
request.ContentLength = postData.Length;
Stream newStream = request.GetRequestStream();
// Send the data.
newStream.Write(postData, 0, postData.Length);
newStream.Flush();
newStream.Close();

好吧,在UrlTemplate 中设置的函数中,我得到了正确的字符串(我在数据中发送了它),但是当字符串包含特殊字符时问题就开始了。

如果字符串是:12&34

我在函数中得到的是:12

如果字符串是:12+34

我在函数中得到的是:12 34

我很高兴知道你们中的一些人是否发生过这种情况以及你们是如何解决的。提前致谢。

【问题讨论】:

标签: c# .net httpwebrequest request


【解决方案1】:

在形成 UrlTemplate 时使用 System.Web.HttpUtility.UrlEncodeSystem.Net.WebUtility.UrlEncode

【讨论】:

    【解决方案2】:

    这个问题是因为字符串是url-form Encoded。 (如果这只是一个 GET,我会说它是 URL 编码的,但您使用的是 POST。)& 符号在 URL 中具有特殊含义,而 + 符号用作空格的替换。

    有关规格,请参阅http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3.3。如果您想获得预期的结果,则需要使用 UrlEncode() 手动对这些进行编码。

    【讨论】:

    • 抱歉,我现在才看到。好的,现在我明白为什么会发生这种情况,但是 UrlEncoder 让我在函数中为空......还有一件事 - 我需要这种形式的发送,因为它被项目中的另一个函数使用。有没有办法强制特定字符串保持这种状态?
    • 谢谢,我只是误解了你给的UrlEncode...现在我正在使用HttpUtility.UrlEncode,这完全解决了问题。再次感谢您的详细回答。
    【解决方案3】:

    在您的密码中使用 URI.EscapeDataString() 方法。它将帮助您正确读取您的特殊字符。

    【讨论】:

      猜你喜欢
      • 2015-05-28
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多