我将我的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="
时失败。
那我的代码出了什么问题?请帮忙。
答案 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