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



所以我在如何以C#格式发送以下JSON数据方面遇到了很多麻烦。我确切地知道如何在 cURL 中做到这一点,但我一辈子都无法弄清楚这一点。这个要求对我正在做的事情至关重要,我真的需要完成它。这是 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请求非常陌生,因此任何帮助将不胜感激。

我想通了!

    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 数据(字符串格式)。根据您使用的节拍,这对于数据可视化来说可能非常酷。

以下是我如何使用 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 类默认为 GET,因此如果您想使用 GET,您只需为 WWW 类提供:

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

并跳过我的方法的前 2 行。

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

相关内容

  • 没有找到相关文章

最新更新