C#-PostAsync响应返回空数组

时间:2018-08-06 02:05:16

标签: c# php xamarin xamarin.forms

我正在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;
    }
}

1 个答案:

答案 0 :(得分:2)

此问题与Xamarin无关。您的问题在于您提供的PHP代码以及当您尝试使用POSTman发送内容时,没有将其作为请求的正文发送。

为了读取请求正文,您需要读取输入流:

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

然后您可以使用

输出
var_dump($json);

关于您的RestService代码,我建议您提供字符串内容的内容类型:

var s = new StringContent(json, Encoding.UTF8, "application/json");