2017-12-28 9 views
1

Ich versuche, ein Formular an eine Website mit HTTP-Client zu senden. Die Website gibt dann eine Liste mit Daten basierend auf meiner Anfrage zurück. Der Prozess selbst funktioniert gut, aber ich muss 3 Anfragen machen, während einer reicht, wenn ich es manuell im Browser mache.Veröffentlichen mehrerer Werte mit einem Parameter mit httpclienthandler in C#

Im Browser habe ich mehrere Kontrollkästchen, um Filter auf die Daten anzuwenden. Die entsandte http Form hat folgende Daten darin:

enter image description here

konnte ich die gleichen Daten erhalten, indem eine dictonary in C# zu schaffen, die ich dann in eine FormUrlEncodedContent umgewandelt:

values = new Dictionary<string, string> 
{ 
    { "statuses[]", "2048" }, 
    { "issued_from", "" }, 
    { "issued_till", "" }, 
    { "listing_from", "" }, 
    { "listing_till", "" }, 
}; 
var content = new FormUrlEncodedContent(values); 
content.Headers.Add("X-Requested-With", "XMLHttpRequest"); 
var response = GlobalVar.client.PostAsync(URI, content).Result; 

Mit Bei dieser Methode muss ich 3 Anfragen stellen und die erhaltenen Daten anschließend zusammenführen. Dies ist natürlich nicht die sauberste Lösung mit den Kosten meiner Systemressourcen, den Kosten für Serverressourcen und der Internetbandbreite.

überprüfte ich die unformatierten Header der Anforderung in dem Browser, der wie folgt aus sah:

Referer: https://www.example.com/en/example/?statuses[]=512&statuses[]=1024&statuses[]=2048&max_results=100&page=1 

Dies führte mich zu dem Schluss, dass ich vielleicht die Zustände dreimal in das Wörterbuch nur hinzufügen:

values = new Dictionary<string, string> 
{ 
    { "statuses[]", "512" }, 
    { "statuses[]", "1024" }, 
    { "statuses[]", "2048" }, 
    { "issued_from", "" }, 
    { "issued_till", "" }, 
    { "listing_from", "" }, 
    { "listing_till", "" } 
}; 

Leider scheint ein Wörterbuch wie eine Datenbank zu funktionieren und akzeptiert nicht denselben Schlüsselwert mehrmals.

Hat jemand eine Lösung, wie ich alle drei Status in einer einzigen Anfrage buchen kann? Kann ich nur etwas anderes wie

List<Tuple<string,string>>()? 

mit freundlichen Grüßen und vielen Dank für Hilfe verwenden.

Antwort

0

Es ist wahrscheinlich besser, dass Sie eine CSV-Zeichenfolge für Werte als ein Array senden. Wenn Sie ein Array verwenden möchten, gehen Sie wie folgt vor:

Dictionary<string, string[]> values = new Dictionary<string, string[]>{ 
       { "statuses", new string[] {"512","1024","2048" }}, 
       { "issued_from", null }, 
       { "issued_till", null }, 
       { "listing_from", null }, 
       { "listing_till", null } 
      }; 
Verwandte Themen