C#REST服务客户端和服务器

时间:2016-01-22 21:06:40

标签: c# json rest

我正在尝试编写一个简单的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字符串?

提前致谢。

1 个答案:

答案 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有一个库可以序列化和反序列化以在两者之间传输。