【问题标题】:Webclient not interpreting enter character correctly in WP7Webclient 在 WP7 中没有正确解释输入字符
【发布时间】:2011-07-31 17:52:04
【问题描述】:

我在使用 WebClient.UploadStringAsync 方法时遇到了问题。我必须向外部服务器发出包含一些信息的 POST 请求,并且在该请求中,我必须将包含在 TextBox 中的文本包含在内。

我要做的是:

Uri url = new Uri("http://www.someweb.com");
string request = "{\"requests\":[\"sendMessage\",{\"body\":\"" + newMessageTextBox.Text + "\"}]}";

WebClient wb = new WebClient();
wb.UploadStringCompleted += new UploadStringCompletedEventHandler(nb_UploadStringCompleted);
wb.UploadStringAsync(url, "Post", request);

没有问题,但是如果我在返回中包含一条消息,例如 “你好

大家” 服务器返回一个错误。如果我用 Wireshark 嗅探我的流量,我可以看到我的 POST 请求,但它如下:

"{"requests":["sendMessage",{"body":"你好

大家"}]}"

虽然我想发送的是

"{"requests":["sendMessage",{"body":"Hello\n\neverybody"}]}"

有什么想法吗??

谢谢大家

【问题讨论】:

    标签: windows-phone-7 textbox webclient character enter


    【解决方案1】:

    是的,您需要执行适当的 JSON 转义。我个人会为此使用 JSON 库 - 我在 Windows Phone 7 中使用过 Json.NET,它运行良好。

    您将请求构建为 JSON 对象 - 因此根本不指定 JSON 文本表单本身 - 然后要求它将自身格式化为字符串(只需调用 ToString)。例如:

    using System;
    using Newtonsoft.Json.Linq;
    
    class Program
    {
        static void Main(string[] args)
        {
            string text = "Hello\neverybody";
    
            JObject json = new JObject 
            {
                { "requests", new JArray 
                    {
                        new JObject
                        {
                            { "sendMessage", new JObject 
                                {
                                    { "body", text }
                                }
                            }
                        }
                    }
                }
            };
    
            Console.WriteLine(json);
        }
    }
    

    输出:

    {
      "requests": [
        {
          "sendMessage": {
            "body": "Hello\neverybody"
          }
        }
      ]
    }
    

    (显然,如果您不想使用,则不需要使用那么多的空格。您也不必使用对象初始化器。)

    编辑:好的,根据要求进行更改:

    JObject json = new JObject 
    {
        { "sid", sid },
        { "version", "0.6" },
        { "requests", new JArray 
            {
                new JArray
                {
                    new JObject
                    {
                        { "sendMessage", new JObject 
                            {
                                { "body", text },
                                { "recipient", recipient },
                                { "legacy", false },
                                { "thread_key", threadKey }
                            }
                        }
                    }
                }
            }
        }
    };
    

    结果:

    {
      "sid": "sid",
      "version": "0.6",
      "requests": [
        [
          {
            "sendMessage": {
              "body": "Hello\neverybody",
              "recipient": "foo@bar.com",
              "legacy": false,
              "thread_key": "T1"
            }
          }
        ]
      ]
    }
    

    【讨论】:

    • 这看起来像我要找的东西,但我自己尝试做时遇到错误,“无法将 Newtonsoft.Json.Linq.JValue 添加到 Newtonsoft.Json.Linq.JObject 。”假设这是我的错,因为我不知道该怎么做,而我发布的内容并不是我想要发送的内容,确切的内容是:“{\”session_id\“:\”“+ sid +”\ ",\"version\":\"0.6\",\"requests\":[[\"sendMessage\",{\"body\":\"" + newMessageTextBox.Text + "\",\"recipient \":\"" + counterPartUserId + "\",\"legacy\":false,\"thread_key\":\"" + threadKey + "\"}]]}";
    • @Jorge:我认为您在评论中的版本中缺少右括号 - 但请参阅我的编辑以获取适当的代码。
    • 哈!确实我忘记了你提到的大括号,但现在我遇到了相反的问题,我有太多\r的xD......现在我要发送的是“{\r\n\”session_id\” :\"abcd\",\r\n\"版本\":\"0.6\",\r\n\"请求\":[\r\n{\r\n\"sendMessage\":[ \r\n{\r\n\"body\": \"Te\\rst\",\r\n\"recipient\": 64834580,\r\n\"legacy\": false,\r \n\"thread_key\": \"13119501400059934348\"\r\n}\r\n]\r\n}\r\n]\r\n}"... 也许我不应该使用 json。 ToString()??在那种情况下,我不能使用 webclient.UploadStringAsync(url, "Post", json.ToString());
    • @Jorge:抱歉,当所有内容都在评论中时,很难分辨出哪里出了问题……您尝试发送的内容与收到的内容有什么区别?
    • 我想要做的是让 \r 只是在 newMessageTextBox.Text 部分中,而不是其余部分,按照你说的做你说的返回我 \r's 和 \n's 无处不在,也没有转义“,返回\”的
    猜你喜欢
    • 2012-11-01
    • 2022-12-03
    • 2013-03-19
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多