2010-10-15 17 views
7

Ho un'applicazione .net che ha una richiesta Web che a un POST aggiunge più volte la stessa chiave, rendendola quindi una matrice agli occhi di PHP, Java Servlet, ecc. Volevo riscriverlo all'utilizzo di WebClient, ma se chiamo QueryString.Add() di WebClient con la stessa chiave più volte, aggiunge semplicemente i nuovi valori, creando un singolo valore separato da virgole invece di una matrice di valori.POST'ing matrici in WebClient (C# /. Net)

Ho inserito la mia richiesta utilizzando UploadFile() di WebClient perché in aggiunta a questi metadati voglio un file pubblicato.

Come posso utilizzare WebClient per pubblicare una matrice di valori anziché un singolo valore (di valori separati da virgola)?

Acclamazioni

Nik

risposta

5

PHP utilizza semplicemente un parser per convertire più valori inviati in formato matrice a una matrice. Il formato è <arrayName>[<key>].

Quindi se si desidera ricevere un array in PHP da $_GET aggiungere questi parametri di query: x[key1] e x[key2]. $_GET['x'] in PHP sarà un array con 2 elementi: ["x"]=> array(2) { ["key1"]=> <whatever> ["key2"]=> <whatever> }.

Modifica - si può provare questo metodo di estensione:

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

e nel codice:

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

o manualmente:

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

Non v'è alcun controllo degli errori, ecc Puoi farlo da solo :)

+0

Corretto, è così che PHP analizza un array. Ma WebClient, per quanto ne so, invece darà ["x"] = "qualunque cosa, qualunque cosa", che non è ciò che voglio inviare. Hai qualche suggerimento su come faccio a comportarmi correttamente con WebClient? – niklassaers

+0

@niklassaers: con 'webClient.QueryString.Add (" x [key1] "," 4 ");' e 'webClient.QueryString.Add (" x [key2] "," 3 ");' Termino sempre- con un array in '$ _GET'. La mia versione PHP è 5.3.2. –

+0

Grazie per il suggerimento, ti darò un vortice di lunedì. :-) – niklassaers