2009-10-08 59 views
5

He pedido here cómo hacer la publicación de https, y ahora eso funciona bien. El problema ahora es ¿Cómo enviar un parámetro, nombre de la consulta, la cual es una cadena JSON:Cómo enviar parámetros en un POST de Https con C#

{ "key1": "valor1", "clave2": { "key21": "val21"}}

Lo Estoy haciendo y no funciona es:

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);      
} 

Pero el servidor siempre responde diciendo que no hay parámetro de 'consulta'. ¿Alguna ayuda?

¡Gracias de antemano!

+0

no el servidor puede que esperan un parámetro de consulta en la URL? como http: // host /? query = xyz – Lucero

+0

Eso es lo que no sé, ya que el único ejemplo proporcionado por los desarrolladores del servidor fue en php (código en la primera pregunta) –

+0

Ver también: http: //marcgravell.blogspot .com/2009/10/pass-data-simply-learning-from-jquery.html –

Respuesta

9

me gustaría utilizar 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); 
     } 
+0

Gracias Mark, pero estoy obteniendo la misma respuesta que con mi código. Intentaré volver a preguntar a los desarrolladores de servidores para obtener más retroalimentación. –

+0

Bueno, lo he probado localmente y funciona muy bien, por lo que debe haber algunos problemas de compatibilidad o algo similar. –

+0

¿No este código publicaría la solicitud dos veces? Estás llamando a client.UploadValues ​​(url, fields); dos veces. –