0

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":"こんにちは\n\nみなさん"}]}"

何か案は??

皆さん、ありがとうございました

4

1 に答える 1

0

はい、適切な 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"
        }
      }
    ]
  ]
}
于 2011-07-31T18:12:34.250 に答える