c # — переменная $ _POST пуста при отправке POST

Я пытаюсь отправить JSON к моему rest-api с помощью RestSharp, По сути, я создал класс модели для JSON:

public class LogPostData
{
public string LogMessage { get; set; }
public string LogStackTrace { get; set; }
public string LogUserId { get; set; }
public string LogUserIp { get; set; }
}

поэтому я выполняю запрос следующим образом:

 var logPost = new LogPostData();
logPost.LogMessage = "log message"logPost.LogStackTrace = "some content";

var post = JsonConvert.SerializeObject(logPost);

var client = new RestClient("url of rest api");

var request = new RestRequest("methodApi", Method.PUT);
request.RequestFormat = DataFormat.Json;
request.AddParameter("application/json; charset=utf-8", post, ParameterType.RequestBody);
request.RequestFormat = DataFormat.Json;

var response = client.Execute(request);

как вы можете видеть, я создал объект LogPostData а затем сериализовал его с помощью JsonConvert.SerializeObject,

Я позвонил methodApi передавая в качестве параметра JSON.

Теперь, внутри моего API для отдыха, я сделал следующее:

file_put_contents('debug.txt', serialize($_POST));

содержимое должно быть переменной, с которой я отправил RestSharp на post переменная, вместо этого я получаю: a:0:{}

почему мой $_POST переменная пуста?

0

Решение

Согласно Руководство по PHP, $_POST работает с application/x-www-form-urlencoded а также multipart/form-data типы контента. Вы отправляете JSON (application/json). поскольку $_POST является ассоциативным массивом, созданным из опубликованных данных формы, и вы не публикуете форму, поэтому неудивительно, что она будет пустой.

Чтобы получить сырой JSON из тела запроса, вам нужно использовать php://input

$json = file_get_contents('php://input');

Для десериализации JSON объекта вы можете использовать json_decode,

$logPostData = json_decode($json);

Если вы хотите, чтобы данные были преобразованы в ассоциативный массив, как $_POST, вы можете пройти true в качестве второго параметра:

$logPostData = json_decode($json, true);
1

Другие решения

Вот что вы отправляете (JSON):

header: encoding-type=application/json
body: {"param1":"I like horses", "param2":"they are cool"}

Это то, что нужно PHP в запросе POST для работы массива $ _POST (отправка формы)

header: encoding-type=application/x-www-form-urlencoded
body: param1=I%20like%20horses&param2=they%20are%20cool

Если вы счастливы с отправкой JSON, вам нужно получить его правильно.
Если вы хотите продолжать использовать PUT, создайте для него обработчик, который ожидает JSON. (На основе этот ответ)

$method = $_SERVER['REQUEST_METHOD'];
if ('PUT' === $method) {
$data = json_decode(file_get_contents('php://input'), true);
var_dump($data); //$data contains put fields
}
0

По вопросам рекламы [email protected]