C# 无法在c中发送json数据#
我正在将我的JSON字符串发送到此url 我使用的代码如下:C# 无法在c中发送json数据#,c#,json,C#,Json,我正在将我的JSON字符串发送到此url 我使用的代码如下: internal static async Task<String> getHttpResponse(HttpWebRequest request,string postData) { String received = null; byte[] requestBody = Encoding.UTF8.GetBytes(postData); using(var postStream=await
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;
}
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字符串:
(不带参数“”data=“)并向我发送响应字符串。但在服务器url中实现并使用术语“?data=“
”时失败
那么,我的代码出了什么问题?请提供帮助。如果我理解正确,您是否正在尝试向服务器发送POST请求并从服务器获得响应 POST请求方法文档中说,POST请求必须用于提交数据,而不是获得响应 请注意,查询字符串(名称/值对)在POST请求的HTTP消息体中发送,如下所示:
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
因此,从我在您发布的代码中看到的情况来看,从客户端的角度来看(因为我们没有看到服务器端代码),您正在请求主体中向服务器发送请求 :请求主体中的一种方式,查询字符串中的另一种方式 在我看来,你是在混合这两者 当您向您的服务器发送POST请求时,该地址没有
?data=
然后你在正文中发送请求
解决方案:
- 如果要在请求正文中过帐,请过帐到查询字符串中不带?data=参数的地址
- 如果要通过查询字符串发送,则需要在?数据之后添加值=
http://myipaddress/WindowsApp/Registration?data=MyValue
您的Url应该是,因为您正在有效负载中发布数据。您希望查询字符串中包含参数吗?这就是为什么在那里有data=的原因吗?通常在
?data=
之后,您必须像?data=42
那样输入参数/参数值。顺便问一下:您是否尝试在服务器站点上使用调试器/一些日志来查看您是否得到有效的请求以及服务器如何响应?如果你尝试像邮递员这样的第三方工具呢?是的。我可以点击服务器,但我的服务器得到空值。而我在c#代码中的响应字符串没有接收任何内容。那么,用这个参数发送json字符串的过程是什么呢?你没有给出这个参数,所以是的null
或者这里需要一个空字符串……好的,但是你能给我一个演示代码吗?因为我想我在这个概念上缺乏足够的知识。你自己说过,如果你不添加?data=
,它就会工作。。。你为什么还要添加这个?因为实际上,在未来我的服务器将使用这种类型的实现,它将有多个参数。确切地说@CarstenKönig是正确的,但它也可能只是一种解决方法。似乎您需要更详细地研究服务器端,以及它所期望的内容。您可以将Json发布到它,但它也可能需要某种?data=参数,您可能需要将其作为查询字符串传入。我不知道,因为我不知道服务器端的规格。如果是在“未来”,那么现在添加一个不完整的查询是没有意义的(你不同意吗)-很可能你的web框架会首先查看查询字符串,因此假设你的数据
为null
(也因为它是JSON,所以您可以随时在那里添加所需的参数),但答案应该是200/OK,she服务器不应该返回任何esle