2010-10-15 11 views
7

Ich habe eine .net-Anwendung, die eine WebRequest hat, die zu einem POST mehrere Male den gleichen Schlüssel hinzufügt, so dass es ein Array in den Augen von PHP, Java Servlets usw. Ich wollte dies mit WebClient umschreiben, aber wenn ich den QueryString.Add() von WebClient mehrmals mit dem gleichen Schlüssel aufruft, werden nur die neuen Werte angehängt, wodurch ein durch Komma getrennter einzelner Wert anstelle eines Array von Werten entsteht.POST-Arrays im WebClient (C#/.net)

Ich poste meine Anfrage mit UploadFile() von WebClient, weil ich zusätzlich zu diesen Metadaten eine Datei gepostet habe.

Wie kann ich mit WebClient ein Array von Werten anstelle eines einzelnen Werts (von durch Kommas getrennten Werten) posten?

Prost

Nik

Antwort

5

PHP verwendet einfach einen Parser mehrere Werte umzuwandeln, mit Array-Format auf ein Array gesendet. Das Format lautet <arrayName>[<key>]. Wenn Sie ein Array in PHP von $_GET erhalten möchten, fügen Sie diese Abfrageparameter hinzu: x[key1] und x[key2]. $_GET['x'] in PHP wird ein Array mit 2 Elementen sein: ["x"]=> array(2) { ["key1"]=> <whatever> ["key2"]=> <whatever> }.

bearbeiten - können Sie diese Erweiterung Methode versuchen:

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

und in Code:

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

oder manuell:

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

Es gibt keine Fehlerprüfung, etc. Du kannst es selbst machen :)

+0

Richtig, so parst PHP ein Array. Aber WebClient wird, soweit ich weiß, stattdessen ["x"] = "was auch immer, was auch immer" geben, was ich nicht senden möchte. Haben Sie Vorschläge, wie ich den WebClient korrekt verhalten kann? – niklassaers

+0

@niklassaers: mit 'webClient.QueryString.Add (" x [key1] "," 4 ");' und 'webClient.QueryString.Add (" x [key2] "," 3 ");' Ich beende immer- up mit einem Array in '$ _GET'. Meine PHP-Version ist 5.3.2. –

+0

Danke für den Tipp, ich gebe das einen montag. :-) – niklassaers