0

我有以下。它到达了一个我在 PHP 中设置的 api 页面……当场。嗯嗯……没有问题。

    public static async Task<string> GetData(string url, string data)
    {
        HttpClient client = new HttpClient();
        StringContent queryString = new StringContent(data);            

        HttpResponseMessage response = await client.PostAsync(new Uri(url), queryString);

        //response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();

        return responseBody;
    }

字符串数据实际上是具有各种属性的对象的 JSON.NET 表示。在我的 PHP 页面上,我正在查看其中一个属性“用户名”。因此,假设我发送以下信息:

public class PostContent
{
    public string username { get; set; }
}

PostContent data = new PostContent { username = "dooby" };

string json = JsonConvert.SerializeObject(postData);
return PostRequest.GetData(AuthURL, json);

在我的 PHP 页面上,我向发布数据 $_POST["username"]... 发出请求,但响应中没有任何结果。如果我输出一些随机字符串以确保我访问的是正确的页面,我会正确地得到字符串。

在此处输入图像描述

所以POST数据没有通过......我在这里做错了什么?

4

2 回答 2

0

尽管您的问题写得不是很清楚,但据我所知,您似乎正在将一些 JSON 数据从 C# 客户端发布到 PHP 服务器,并且您的 PHP 代码在收到请求时无法从请求中读取数据从客户端。是这个问题吗?

如果是这样,我认为问题可能是您Content-Type在向服务器发出请求时没有设置标头。该类文档StringContent说默认内容类型是text/plain. 由于您要发送 JSON 数据,因此您应该指定内容类型为application/json. 如果服务器不知道您发送的数据类型,它可能无法正确解析数据。

尝试queryString像这样初始化变量:

StringContent queryString = new StringContent(data, Encoding.UTF8, "application/json");
于 2013-09-26T01:52:11.420 回答
0

这似乎完美地解决了这个问题。我在别人的 stackoverflow 页面上找到了它:.NET:发送带有数据的 POST 并读取响应的最简单方法

It works like a charm! I'll make this answer better when I get home

var pairs = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("postdataproperty", "blabla"),
    new KeyValuePair<string, string>("postdataproperty2", "blabla2"),
}

var content = new FormUrlEncodedContent( pairs );
于 2013-09-26T09:20:22.273 回答