title: C# REST Service Client and Server
body: <p>I'm trying to write a simple REST service that I can talk to through my C# application. I want to send the REST service a JSON string and for it to send me a JSON string back. I want to do this using POST not GET as there is a fair amount of data that needs to be sent to it.. Also I would like to do it using what is built into the .net library that I'm using - .NET Framework 4.0.</p>
  
  <p>So far I have the following code:</p>
  
  <p><strong>Client</strong></p>
  
  <pre><code>        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("/") &amp;&amp; 
                  (!string.IsNullOrEmpty(sParam))))
              {
                  sbRequest.Append("/");
              }
              sbRequest.Append(sParam);
  
              return sbRequest.ToString();
          }
  </code></pre>
  
  <p><strong>Server</strong></p>
  
  <pre><code>using System;
  using System.ServiceModel;
  using System.ServiceModel.Web;
  using System.ServiceModel.Activation;
  using System.IO;
  
  namespace ExampleRESTService
  {
      [ServiceContract(Name = "RESTServices")]
      public interface IRESTServices
      {    
          [OperationContract]
          [WebInvoke(Method = "POST", UriTemplate = Routing.Route, BodyStyle = WebMessageBodyStyle.Bare)]
          string GetCounts();
      }
  
      public static class Routing
      {            
          public const string Route = "/GetCounts";
      }
  
     [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]
      [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
      public class RESTServices : IRESTServices
      {
          public string GetCounts()
          {
              string sData = "Hello"
              return sData;
          }
      }
  }
  </code></pre>
  
  <p>Now this isn't all of the code but it is the bits that are important I think. Also I've changed names for display online but it all compiles so please ignore if a typo. Apologies if there is something significant.</p>
  
  <p>The REST service can be called from my client fine as is but my question is...</p>
  
  <p>How do I extract the data in my REST service <strong>GetCounts</strong>() method that was posted to it from the client, i.e the JSON string?</p>
  
  <p>Thanks in advance.</p>