如何发送一个带有body的GET请求到API Rest c#

本文关键字:请求 GET API Rest body 何发送 一个 | 更新日期: 2023-09-27 18:11:29

嗨,我正在做一个与API交互的windows窗体项目。到目前为止,我能够开发应用程序,但现在我遇到了一个无法解决的问题。我试图在GET请求中发送json正文,如下所示:

例子:

注:以获取温度传感器最近三天的平均值为例。请求

GET http://api.effilogics.com/nodes/583/parameters/30/data?resolution=day&groupby=avg
{begin: '2014-04-21T16:13:30+02:00', end: '2014-04-24T15:44:12+02:00'}

我不确定我是否正确地发送了正文(日期开始和结束),因为我收到一条消息错误,说不可能发送这种类型的冗长文本内容。我的问题是如何在GET请求中发送数据/时间体??我不能更改为POST请求。

部分代码如下:

public void Request4(String url)
    {
        try
        {                
            HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url);
            myReq.Method = "GET";
            myReq.ContentType = "application/json";
            myReq.KeepAlive = true;
            myReq.Headers.Set("Cache-Control", "no-store");
            myReq.Headers.Set("Pragma", "no-cache");
            myReq.Headers.Set("Authorization", token_type + " " + access_token);

            datestruct dateST = new datestruct();
            dateST.begin = string.Concat("'begin':",DateTime.UtcNow.ToString("s",System.Globalization.CultureInfo.InvariantCulture),"+02:00");
            byte[] getBytes = Encoding.UTF8.GetBytes(dateST.begin);
            myReq.ContentLength = getBytes.Length;
            Stream body = myReq.GetRequestStream();
            body.Write(getBytes, 0, getBytes.Length);
            body.Close();
            //Obtenim la resposta del servidor
            WebResponse myResponse = myReq.GetResponse();
            Stream rebut = myResponse.GetResponseStream();
            // Pipes the stream to a higher level stream reader with the required encoding format. 
            StreamReader readStream = new StreamReader(rebut, Encoding.UTF8);
            //richTextBox6.AppendText(readStream.ReadToEnd() + "'n");
            string info = readStream.ReadToEnd();
            split3 = info.Split(new char[] { '[', '{', ',', '}', ']' });
            int mida = split3.Length;
            Array.Resize(ref split3, mida - 2);
            Array.Reverse(split3);
            mida = split3.Length;
            Array.Resize(ref split3, mida - 3);
            Array.Reverse(split3);
            foreach (string s in split3)
            {
                richTextBox6.AppendText(s);
                richTextBox4.AppendText(s);
            }
            myResponse.Close();
            readStream.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Errors", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
如果有人能帮助我,我将非常感激。由于

如何发送一个带有body的GET请求到API Rest c#

正如我在对你的问题的评论中解释的那样,通常一个GET请求没有主体,因此我怀疑API会接受它(因此你的错误消息),尝试将其编码到url中(只需确保你的json对象结构与API接受的参数相同)

尝试使用Uri之类的东西构建url。EscapeUriString:

http://api.effilogics.com/nodes/583/parameters/30/data?resolution=day&groupby=avg + Uri.EscapeUriString(JSon)

注:SOAP UI(可能有点硬核)或Fiddler 2(易于使用)是使用REST时非常好的工具。