Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在c中发送json数据#_C#_Json - Fatal编程技术网

C# 无法在c中发送json数据#

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

我正在将我的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 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