如何在C#中使用HTTP请求发送JSON GET数据

时间:2017-01-27 15:03:40

标签: c# json elasticsearch unity3d httpwebrequest

所以我在如何以C#格式发送以下JSON数据方面遇到了很多麻烦。我确切知道如何在cURL中做到这一点,但我不能为我的生活弄清楚这一点。这个要求对我正在做的事情至关重要,我真的需要完成它。这是卷曲声明:

   curl <ip of server>/<index>/_search?pretty=true -d '
 {
"query": {
    "match_all": {}
},
"size": 1,
"sort": [{
    "_timestamp": {
        "order": "desc"
    }
}]
}

如果它有帮助我正在向Elasticsearch服务器发出请求,而我正在抓取JSON数据。这个cURL请求完全符合我的要求。这是我现在拥有的C#代码,但我不确定如何将此JSON数据添加到GET请求中。这也将在Unity游戏引擎中运行。

        // Create a request for the URL.        
        request = WebRequest.Create(elk_url);
        // If required by the server, set the credentials.
        request.Credentials = CredentialCache.DefaultCredentials;
        // Get the response.

        response = (HttpWebResponse)request.GetResponse();
        // Display the status.
        Debug.Log(response.StatusDescription);
        // Get the stream containing content returned by the server.
        dataStream = response.GetResponseStream();
        // Open the stream using a StreamReader for easy access.
        reader = new StreamReader(dataStream);
        // Read the content.
        string responseFromServer = reader.ReadToEnd();
        // Display the content.
        Debug.Log(responseFromServer);
        // Cleanup the streams and the response.
        reader.Close();
        dataStream.Close();
        response.Close();

以上内容仅来自文档页面,我对代码中的HTTP请求不熟悉,因此非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

我明白了!

    WebRequest request = WebRequest.Create(elk_url);

    request.ContentType = "application/json";
    request.Method = "POST";
    byte[] buffer = Encoding.GetEncoding("UTF-8").GetBytes(queryString);
    string result = System.Convert.ToBase64String(buffer);
    Stream reqstr = request.GetRequestStream();
    reqstr.Write(buffer, 0, buffer.Length);
    reqstr.Close();

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Debug.Log(response.StatusDescription);
    dataStream = response.GetResponseStream();
    // Open the stream using a StreamReader for easy access.
    reader = new StreamReader(dataStream);
    // Read the content.
    string responseFromServer = reader.ReadToEnd();
    // Display the content.
    Debug.Log(responseFromServer);
    // Cleanup the streams and the response.
    reader.Close();
    dataStream.Close();
    response.Close();

查询字符串是原始帖子中的JSON数据。对于那些想要了解ELK堆栈的人来说,这将为您提供最新事件的JSON数据(字符串格式)。根据您使用的节拍,这对于数据可视化来说可能非常酷。

答案 1 :(得分:0)

以下是我如何使用POST发送Unity WWW - 请求:

    public IEnumerator SendSomething()
    {
        WWWForm wwwForm = new WWWForm();
        wwwForm.AddField("Parameter_Name", jsonString);

        WWW www = new WWW(url, wwwForm);
        yield return www;

        if (www.error == null)
        {
             Debug.Log("Everything worked!");
        }
        else
        {
             Debug.Log("Something went wrong: " + www.error);
        }
    }

如果你不提供postData参数(我的wwwForm),WWW-class默认为GET,所以如果你想使用GET,你可以为WWW-class提供:

WWW www = new WWW(url + "?" + jsonString);

并跳过我方法的前两行。

这里我们将IEnumerator用于yield return www:等待请求完成,直到继续。要使用IEnumerator方法,可以使用StartCoroutine(SendSomething());调用它,它将运行asyncronized。