您好我正在做一个与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);
}
}
如果有人能帮助我,我将非常感激。感谢
答案 0 :(得分:1)
正如我在对你的问题的评论中解释的那样,GET请求通常没有正文,因此我怀疑API会接受它(因此你的错误信息),尝试将其编码到url中(只需确保你的json对象结构是与API接受的参数相同)
尝试使用Uri.EscapeUriString:
之类的东西构建您的网址http://api.effilogics.com/nodes/583/parameters/30/data?resolution=day&groupby=avg + Uri.EscapeUriString(JSon)
P.S。在使用REST时,SOAP UI (can be a bit hardcore)或Fiddler 2 (easy to use)是非常好的工具。