Search code examples
c#jsonparametershttpshttp-post

How to send parameters on an Https POST with C#


I have asked here how to make the https post, and now that works fine. Problem now is How to send a parameter, name query, which is a JSON string:

{"key1":"value1", "key2":{"key21":"val21"} }

What I'm doing and doesn't work is:

HttpWebRequest q = (HttpWebRequest)WebRequest.Create(Host + ":" + Port);
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
q.Method = "POST";
q.ContentType = "application/json";
q.Headers.Add("JSON-Signature", GetFirma(query));
q.Credentials = new NetworkCredential(user,pass);

byte[] buffer = Encoding.UTF8.GetBytes("query=" + query);

q.ContentLength = buffer.Length;

using (Stream stream = q.GetRequestStream())
{
     stream.Write(buffer, 0, buffer.Length);                    
}

But the server always answer saying there's no 'query' parameter. Any help?


Solution

  • I would use WebClient.UploadValues:

            using (WebClient client = new WebClient())
            {
                NameValueCollection fields = new NameValueCollection();
                fields.Add("query", query);
                byte[] respBytes = client.UploadValues(url, fields);
                string resp = client.Encoding.GetString(respBytes);
            }