我正在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@email.com");
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...
,后跟一个空数组。很奇怪,因为当我在Google chrome上使用PostMan
时,它会返回正确的信息。
我已经检查了json
变量中是否也包含有效的JSON,因此我不确定PostAsync
函数为什么要向我的PHP文件返回/发送一个空数组。>
根据评论请求更新
我要发送的JSON如下:
"{\"username\":\"Barney\",\"password\":\"1234\",\"email\":\"email@email.com\"}"
我的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;
}
}
答案 0 :(得分:2)
此问题与Xamarin无关。您的问题在于您提供的PHP代码以及当您尝试使用POSTman发送内容时,没有将其作为请求的正文发送。
为了读取请求正文,您需要读取输入流:
$json = file_get_contents('php://input');
然后您可以使用
输出var_dump($json);
关于您的RestService代码,我建议您提供字符串内容的内容类型:
var s = new StringContent(json, Encoding.UTF8, "application/json");