使用PostAsync发布JSON时没有内容

时间:2017-10-01 17:33:51

标签: json uwp httpclient httpcontent

使用下面的代码,我设法使用以下格式创建jsonArray:[{"id":3},{"id":4},{"id":5}]

var jArray = new JsonArray();
        int numOfChildren = 10;
        for (int i = 0; i < numOfChildren; i++)
        {
            if (CONDITION == true)
            {
                var jObj = new JsonObject();
                int id = SOMEID;
                jObj.SetNamedValue("id", JsonValue.CreateNumberValue(id));
                jArray.Add(jObj);
            }

我现在正试图发送&#34; JsonArray&#34;使用PostAsync到服务器,如下所示:

Uri posturi = new Uri("http://MYURI");
HttpContent content = new StringContent(jArray.ToString(), Encoding.UTF8, "application/json");
System.Net.Http.HttpResponseMessage response = await client.PostAsync(postUri, content);

在服务器方面,我可以看到帖子请求不包含任何内容。在挖掘互联网之后,看起来在StringContent中使用jArray.ToString()是罪魁祸首,但我不理解为什么或者如果这首先是问题。那么,为什么我的内容丢失了?请注意,我是为不使用JSON.net的UWP应用程序编写的。

2 个答案:

答案 0 :(得分:0)

经过多次挖掘,我最终将两个不同的应用程序Wiresharked,一个使用我原来的jArray.ToString(),另一个使用JSON.net的JsonConver.SerializeObject()。在Wireshark中,我可以看到两个数据包的内容是相同的,所以告诉我我的问题存在于服务器端。我最终发现我处理传入POST请求的PHP脚本过于文字,只接受类型为&#39; application / json&#39;的json帖子。我的UWP应用程序发送了类型为&application; / json的数据包;字符集= UTF-8&#39 ;.放松了一些我在服务器端检查的内容后,一切都很顺利。

对于那些希望在不使用JSON.net的情况下序列化json的人来说,jsonArray.ToString()或者jsonArray.Stringify()都运行良好。

答案 1 :(得分:-1)

您应该使用Serializer将其转换为字符串。 使用NewtonSoft JSON Nuget。

string str = JsonConvert.SerializeObject(jArray);
HttpContent content = new StringContent(str, Encoding.UTF8, "application/json");
System.Net.Http.HttpResponseMessage response = await client.PostAsync(postUri, content);