2010-10-15 6 views
7

J'ai une application .net qui a un WebRequest qui à un POST ajoute plusieurs fois la même clé, ce qui en fait un tableau aux yeux de PHP, Java Servlets etc. Je voulais réécrire cela en utilisant WebClient, mais si j'appelle plusieurs fois QueryString.Add() WebClient avec la même clé, il ajoute simplement les nouvelles valeurs, en faisant une valeur unique séparée par des virgules au lieu d'un tableau de valeurs.Tableaux POST'ing dans WebClient (C# /. Net)

Je poste ma demande en utilisant UploadFile de WebClient() car en plus de ces métadonnées je veux un fichier posté.

Comment utiliser WebClient pour publier un tableau de valeurs au lieu d'une seule valeur (de valeurs séparées par des virgules)?

Vive

Nik

Répondre

5

PHP utilise simplement un analyseur pour convertir plusieurs valeurs envoyées avec le format de tableau à un tableau. Le format est <arrayName>[<key>]. Par conséquent, si vous souhaitez recevoir un tableau en PHP de $_GET, ajoutez les paramètres de requête suivants: x[key1] et x[key2]. $_GET['x'] en PHP sera un tableau avec 2 éléments: ["x"]=> array(2) { ["key1"]=> <whatever> ["key2"]=> <whatever> }.

Modifier - vous pouvez essayer cette méthode d'extension:

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

et dans le code:

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

ou manuellement:

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

Il n'y a pas de vérification d'erreur, etc. Vous pouvez le faire vous-même :)

+0

Correct, c'est ainsi que PHP analyse un tableau. Mais WebClient, pour autant que je sache, donnera à la place ["x"] = "quoi que ce soit, peu importe", ce qui n'est pas ce que je veux envoyer. Avez-vous des suggestions sur la façon dont WebClient se comporte correctement? – niklassaers

+0

@niklassaers: avec 'webClient.QueryString.Add (" x [clé1] "," 4 ");' et 'webClient.QueryString.Add (" x [clé2] "," 3 ");' Je termine toujours- avec un tableau dans '$ _GET'. Ma version de PHP est 5.3.2. –

+0

Merci pour le conseil, je vais donner un tourbillon lundi. :-) – niklassaers