Мой сервер работает с 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();
?>