C # WebClient - очень простая публикация json на PHP сервер - PullRequest
0 голосов
/ 26 февраля 2019

Мой сервер работает с PHP и использует переменную $_POST.Мой клиент использует C #.

С ContentType = application/json, мне нужно использовать $post = json_decode(file_get_contents('php://input'), true); на PHP-сервере

Но с ContentType = application/x-www-form-urlencoded переменная $_POST представляет собой массив со строкой json, такой как[ **the json variable as string** ]

Что не так с моим кодом, когда я использую application/x-www-form-urlencoded


Например:

var post = new Dictionary<string, object>
{
    ["key1"] = "data1",
    ["key2"] = new List<string>{ "data2", "data3" }
};

Получить [ "[\"key1\"] = \"data1\" ... \"data3\"]" ] как $_POST (1 массив с 1 строкой)


Клиент C #:

var post = new Dictionary<string, object>
{
    ["key1"] = "data1",
    ["key2"] = new List<string>{ "data2", "data3" }
};
var url = "https://urlrandom.com";
var method = "POST";

using (var webClient = new WebClient())
{
    webClient.Headers[HttpRequestHeader.UserAgent] = "Other";
    webClient.Headers[HttpRequestHeader.Accept] = "application/json";
    webClient.Headers[HttpRequestHeader.ContentType] = ; // "application/json" or "application/x-www-form-urlencoded"

    var dataString = JsonConvert.SerializeObject(post);
    var bytes = Encoding.UTF8.GetBytes(dataString);
    var jsonBytes = webClient.UploadData(url, method, bytes);
    var jsonString = Encoding.UTF8.GetString(jsonBytes);
    var json = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonString);

    return json;
}

Сервер PHP:

<?php 
echo array_key_exists($_POST, "key1"); /* false with application/x-www-form-urlencoded */
exit();
?>
...