发布数据无法进入我的api页面

时间:2013-09-24 23:17:10

标签: c# httpclient json.net

我有以下内容。它到达了我在PHP中设置的api页面...现货。 yum yum ...没有probs。

    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页面上,我正在查看其中一个属性“username”。 所以我想发送以下信息:

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”]发出请求...并且响应中没有任何内容。如果我输出一些随机字符串以确保我正在访问正确的页面,我正确地得到了字符串。

enter image description here

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

2 个答案:

答案 0 :(得分:0)

虽然你的问题编写得不是很清楚,但从我能理解的情况来看,你看起来正在将一些JSON数据从C#客户端发布到PHP服务器,而你的PHP代码无法从请求中读取数据。它是从客户端收到的。这是问题吗?

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

尝试初始化queryString变量,如下所示:

StringContent queryString = new StringContent(data, Encoding.UTF8, "application/json");

答案 1 :(得分:0)

这似乎完美地完成了这个伎俩。我在别人的stackoverflow页面上找到了它:.NET: Simplest way to send POST with data and read response

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 );