簡體   English   中英

如何使用WinRT將json發布到網站?

[英]How to post json to a website using WinRT?

我正在嘗試將此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方法發送標簽? 我得到“什么都沒得到” ..請幫助

首先,修復您的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"
}

第三,將StringContent替換為FormUrlEncodedContent

如果使用的是PHP $_POST ,則必須在HTTP請求中發送類似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

第四,在PHP中使用您的數據

正如您在上面看到的,數據使用很多百分號編碼。 PHP將自動為您解碼數據,因此您無需擔心。

要將憑據從json轉換為數組,可以使用json_decode

$cred = json_decode($_POST['tag']);

創建但未添加到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);

為什么要使用字典(實際上,您實際上是在創建它,但沒有填寫它)而不是立即使用該對象?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM