Я пишу мобильное приложение на Xamarin.Forms и у меня есть очень простой PHP-файл для моего бэкенда. Мобильное приложение отправляет почтовый запрос в файл PHP, а файл PHP предназначен для var_dump
содержание сообщения.
<?php
echo "Your post response is...";
var_dump($_POST);
?>
Мое приложение Xamarin использует HttpClient
класс для создания простого почтового запроса с использованием PostAsync()
метод.
public class RestService
{
HttpClient client;
private const string URL = "https://braz.io/mobile.php";
public RestService()
{
client = new HttpClient();
client.MaxResponseContentBufferSize = 256000;
}
public async Task<string> getUserInformation()
{
User u = new User("Barns", "password1234", "[email protected]");
string json = JsonConvert.SerializeObject(u);
var uri = new Uri(string.Format(URL, string.Empty));
try
{
client.DefaultRequestHeaders.Add("Accept", "application/json");
StringContent s = new StringContent(json);
var response = await client.PostAsync(uri, s);
string body = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{Console.WriteLine(ex);}
return null;
}
}
По какой-то причине мой почтовый запрос только получает ответ Your post resonse is...
сопровождаемый пустым массивом. Странно, потому что когда я использую PostMan
на Google Chrome, он возвращает правильную информацию.
Я проверил, что мой json
переменная имеет допустимый JSON, так что я не уверен, почему PostAsync
функция возвращает / отправляет пустой массив из / в мой файл PHP.
ОБНОВЛЕНИЕ согласно запросу комментария
JSON, который я посылаю, выглядит следующим образом:
"{\"username\":\"Barney\",\"password\":\"1234\",\"email\":\"[email protected]\"}"
мой user
класс это:
public class User
{
public User(){ }
public string username { get; set; }
public string password { get; set; }
public string email { get; set; }
public User(string username, string password, string email)
{
this.username = username;
this.password = password;
this.email = email;
}
}
Проблема не имеет ничего общего с Xamarin стороной. Ваша проблема заключается в предоставленном вами PHP-коде и том факте, что когда вы пытались отправить что-то с помощью POSTman, вы не отправляли его в качестве тела запроса.
Чтобы прочитать тело запроса, вам нужно прочитать поток ввода:
$json = file_get_contents('php://input');
Затем вы можете вывести это с
var_dump($json);
Что касается вашего кода RestService, я бы посоветовал вам предоставить тип контента для вашего строкового контента:
var s = new StringContent(json, Encoding.UTF8, "application/json");
Других решений пока нет …