我正在尝试编写一个简单的REST服务,我可以通过我的C#应用程序与之交谈。我想向REST服务发送一个JSON字符串,然后向我发送一个JSON字符串。我想使用POST而不是GET这样做,因为需要发送大量数据。我还想使用我正在使用的.net库中内置的东西来做这件事 - .NET框架4.0。
到目前为止,我有以下代码:
客户端
SELECT stddev_time, max_time, avg_time, min_time, cnt,
ROUND(avg_time * cnt, 2) as slowdown
FROM (
SELECT
COALESCE(ROUND(stddev_samp(time), 2), 0) as stddev_time,
MAX(time) as max_time,
ROUND(AVG(time), 2) as avg_time,
MIN(time) as min_time,
COUNT(path) as cnt,
path
FROM
loadtime
GROUP BY
path
ORDER BY
avg_time DESC
LIMIT 10
) X;
服务器
public void SendJSONPostRequest(string sFunction, string sJSON)
{
string sRequest = FormRequest(m_sWebServiceURL, sFunction, string.Empty);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sRequest);
request.Method = "POST";
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(sJSON);
request.ContentLength = byteArray.Length;
request.ContentType = @"application/json";
using (Stream dataStream = request.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
}
long length = 0;
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
length = response.ContentLength;
}
}
catch (WebException ex)
{
// Log exception and throw as for GET example above
}
}
public static string FormRequest(string sURL, string sFunction, string sParam)
{
StringBuilder sbRequest = new StringBuilder();
sbRequest.Append(sURL);
if (!sURL.EndsWith("/"))
{
sbRequest.Append("/");
}
sbRequest.Append(sFunction);
if ((!sFunction.EndsWith("/") &&
(!string.IsNullOrEmpty(sParam))))
{
sbRequest.Append("/");
}
sbRequest.Append(sParam);
return sbRequest.ToString();
}
现在这不是所有的代码,但我认为它是重要的。此外,我已经更改了在线显示的名称,但它们都编译,所以如果输入错误请忽略。如果有重要的事情,请道歉。
可以从我的客户端调用REST服务,但我的问题是......
如何从客户端发布到我的REST服务 GetCounts ()方法中提取数据,即JSON字符串?
提前致谢。
答案 0 :(得分:0)
响应以流的形式返回。
我想你会发现答案就在这个链接中
How to convert WebResponse.GetResponseStream return into a string?
我自己多次使用的样本如下
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
如果您想将JSON转换为类以便于操作,那么Newtonsoft有一个库可以序列化和反序列化以在两者之间传输。