2

このJSONデータ文字列を自分のphpサイトに投稿しようとしています。

{
    "tag":"login"
    "email":"email@email.com"
    "password":"P@ssw0rd"
}

これは私が持っている私のC#コードです:

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("http://localhost/login/");
        string link = "http://localhost/login/";

        UserCredentials cred = new UserCredentials(email.Text, pass.Password.ToString());
        var data = new Dictionary<string, List<UserCredentials>>();
        string json = JsonConvert.SerializeObject(data, Formatting.Indented);


        HttpResponseMessage re = await client.PostAsync(link, new StringContent(json));

ユーザー資格情報クラス:

public class UserCredentials
{
    public UserCredentials(string user, string pass)
    {
        User = user;
        Pass = pass;
        Tag = "login";
    }

    internal string User;
    internal string Pass;
    internal string Tag;
}

私のphpスクリプトで:

<?php

if (isset($_POST['tag']) && $_POST['tag'] != '') {
  echo "got tags";
else 
  echo "didn't get anything";
?>

postasyncメソッドを介してタグを送信する方法を誰かが知っていますか?私は「何も得られなかった」を得ています..助けてください

4

3 に答える 3

1

まず、UserCredentialsクラスを修正します。メンバーを内部ではなく公開します。

public class UserCredentials
{
    public UserCredentials(string user, string pass)
    {
        User = user;
        Pass = pass;
        Tag = "login";
    }

    public string User;
    public string Pass;
    public string Tag;
}

次に、資格情報のみをシリアル化します。

UserCredentials cred = new UserCredentials(email.Text, pass.Password.ToString());
string json = JsonConvert.SerializeObject(cred, Formatting.Indented);
System.Diagnostics.Debug.WriteLine(json);

[出力]ウィンドウに次のようなものが表示されます。

{
  "User": "me@hotmail.com",
  "Pass": "ILoveToEatGrapes",
  "Tag": "login"
}

第三にStringContentFormUrlEncodedContent

PHPを使用している場合は、HTTPリクエストの$_POSTようなものを送信する必要があります。key1=value1&key2=value2これは呼び出されx-www-form-urlencoded、HttpClientにはこれに適したクラスが含まれていますFormUrlEncodedContent

FormUrlEncodedContentキー/値ペアの辞書を受け取ります。

// Create the list of keys and values.
var data = new Dictionary<string, string>();
data["tag"] = json;

// Send my keys and values.
HttpClient client = new HttpClient();
string link = "http://localhost/login/";
HttpResponseMessage re = await client.PostAsync(link, new FormUrlEncodedContent(data));

これは、接続を介して送信されます。

POST /login/ HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: localhost
Content-Length: 142
Expect: 100-continue
Connection: Keep-Alive

tag=%7B%0D%0A++%22User%22%3A+%22me%40hotmail.com%22%2C%0D%0A++%22Pass%22%3A+%22I
LoveToEatGrapes%22%2C%0D%0A++%22Tag%22%3A+%22login%22%0D%0A%7D

第4に、PHPでデータを使用します

上記のように、データは多くのパーセント記号でエンコードされています。PHPは自動的にデータをデコードするので、それについて心配する必要はありません。

クレデンシャルをjsonから配列に変換するには、json_decodeを使用できます

$cred = json_decode($_POST['tag']);
于 2012-11-15T16:36:34.697 に答える
0

オブジェクトの代わりに辞書を使用している理由は何ですか(実際には作成しますが、入力しません)。

    UserCredentials cred = new UserCredentials(email.Text, pass.Password.ToString());
    string json = JsonConvert.SerializeObject(cred, Formatting.Indented);
于 2012-11-13T00:49:11.063 に答える
0

cred が作成されたが、追加されていない場合、dataおそらく空のセットになります

UserCredentials cred = new UserCredentials(email.Text, pass.Password.ToString());
var data = new Dictionary<string, List<UserCredentials>>();
data["key"] = new List<UserCredentials>{cred};
string json = JsonConvert.SerializeObject(data, Formatting.Indented);
于 2012-11-12T23:54:14.517 に答える