无法在c#中发送json数据

时间:2015-04-30 10:57:23

标签: c# json

我将我的JSON字符串发送到此网址http://myipaddress/WindowsApp/Registration?data=

我使用的代码如下:

internal static async Task<String> getHttpResponse(HttpWebRequest request,string postData)
{
    String received = null;

    byte[] requestBody = Encoding.UTF8.GetBytes(postData);

    using(var postStream=await request.GetRequestStreamAsync())
    {
        await postStream.WriteAsync(requestBody, 0, requestBody.Length);
    }

    try
    {
        var response = (HttpWebResponse)await request.GetResponseAsync();
        if(response != null)
        {
            var reader = new StreamReader(response.GetResponseStream());
            received = await reader.ReadToEndAsync();
        }
    }
    catch(WebException ae)
    {
        var reader = new StreamReader(ae.Response.GetResponseStream());
        string responseString = reader.ToString();
        Debug.WriteLine("################ EXCEPTIONAL RESPONSE STRING ################");
        Debug.WriteLine(responseString);
        return responseString;
    }
    return received;
}

当我点击XAML中的一个按钮时,我正在调用此方法,如下所示:

 HttpWebRequest request = HttpWebRequest.Create(Classes.Constants.SERVER_URL) as HttpWebRequest;

request.Method = "POST";
request.ContentType = "application/json";
postData = JsonConvert.SerializeObject(user);                
string receivedString = await getHttpResponse(request, postData);
Debug.WriteLine("############# RECEIVED STRING #############");
Debug.WriteLine(receivedString);

所以,我面临的问题是我无法在服务器上获取字符串。

注意:当我的服务器使用url实现其方法时,我能够获取json字符串:http://myipaddress/WindowsApp/Registration (没有参数“?data =”)并且还向我发送响应字符串。但是在服务器URL中实现并使用术语"?data="时失败。

那我的代码出了什么问题?请帮忙。

3 个答案:

答案 0 :(得分:2)

因此,从我在您发布的代码中看到的内容,从客户端的角度来看(因为我们没有看到服务器端代码),您正在向请求正文中的服务器发送请求。

There are two ways to POST:请求正文中的一种方式,查询字符串中的另一种方式。

在我看来,你正在混合两者。

当您向服务器发送POST请求时,地址为,而不是 ?data= 然后你在身体里发送请求。

<强>解决方案:

  • 如果要在请求正文中POST,请在查询字符串中没有?data =参数的地址POST

  • 如果要通过查询字符串发送,则需要在?data =

  • 之后添加值

类似的东西:

http://myipaddress/WindowsApp/Registration?data=MyValue

答案 1 :(得分:0)

您的网址应为http://myipaddress/WindowsApp/Registration,因为您要在有效负载中发布数据。

答案 2 :(得分:-1)

如果我已正确理解了所有内容,您是否尝试向服务器发送POST请求并从服务器获取响应?

POST请求方法文档说,POST请求必须用于提交数据,而不是获得响应。

请注意,查询字符串(名称/值对)在POST请求的HTTP消息正文中发送,如下所示:

POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2