2010-10-15 12 views
7

Tengo una aplicación .net que tiene una WebRequest que a un POST agrega varias veces la misma clave, convirtiéndola así en una matriz a los ojos de PHP, Java Servlets, etc. Quería volver a escribir esto para usar WebClient, pero si llamo a QueryString.Add() de WebClient con la misma clave varias veces, simplemente agrega los nuevos valores, haciendo un valor único separado por comas en lugar de una matriz de valores.POST'ing arrays en WebClient (C# /. Net)

Publiqué mi solicitud usando WebClient's UploadFile() porque además de estos metadatos quiero que se publique un archivo.

¿Cómo puedo usar WebClient para publicar una matriz de valores en lugar de un único valor (de valores separados por comas)?

Saludos

Nik

Respuesta

5

PHP simplemente utiliza un analizador para convertir varios valores enviados con formato de matriz a una matriz. El formato es <arrayName>[<key>].

Si desea recibir una matriz en PHP desde $_GET agregue los siguientes parámetros de consulta: x[key1] y x[key2]. $_GET['x'] en PHP será una matriz con 2 elementos: ["x"]=> array(2) { ["key1"]=> <whatever> ["key2"]=> <whatever> }.

Editar - se puede probar este método de extensión:

public static class WebClientExtension 
{ 
    public static void AddArray(this WebClient webClient, string key, params string[] values) 
    { 
     int index = webClient.QueryString.Count; 

     foreach (string value in values) 
     { 
      webClient.QueryString.Add(key + "[" + index + "]", value); 
      index++; 
     } 
    } 
} 

y en el código:

webClient.AddArray("x", "1", "2", "3"); 
webClient.AddArray("x", "4"); 

o manualmente:

webClient.QueryString.Add("x[key1]", "4"); 
webClient.QueryString.Add("x[key2]", "1"); 

No hay ninguna comprobación de errores, etc. . Puede hacerlo usted mismo :)

+0

Correcto, así es como PHP analiza una matriz. Pero, hasta donde yo sé, WebClient dará ["x"] = "lo que sea, lo que sea", que no es lo que quiero enviar. ¿Tiene alguna sugerencia sobre cómo hacer que WebClient se comporte correctamente? – niklassaers

+0

@niklassaers: con 'webClient.QueryString.Add (" x [key1] "," 4 ");' y 'webClient.QueryString.Add (" x [key2] "," 3 ");' Siempre termino- con una matriz en '$ _GET'. Mi versión de PHP es 5.3.2. –

+0

Gracias por la sugerencia, voy a dar un giro el lunes. :-) – niklassaers