Ich brauche einen Dienst, der einen GET-Parameter namens "names []" verwendet.Verhindern, dass C# aus Klammern in Abfragezeichenfolge codiert wird
Zum Beispiel: GET http://example.com/name2id?names []=john
Wenn ich versuche, dass eine WebClient in C# verbrauchen verwenden, werden die Klammern wird auf% 5B% 5D codiert, das die servies nicht versteht. Wenn ich das obige mit meinem Browser (uncodiert) sende, funktioniert alles gut.
Heres das Beispiel, das nicht funktioniert:
using (var client = new System.Net.WebClient())
{
response = client.DownloadString(new Uri("http://example.com/name2id?names[]=john"));
}
von Fiedler Wachte, heres die Anfrage:
GET http://example.com/name2id?names%5B%5D=john HTTP/1.1
Host: example.com
Connection: Keep-Alive
Gibt es eine Möglichkeit der Rahmen nicht die URL kodieren zu machen, oder eine andere Um dieses Problem herum?
P.S. Ich kontrolliere nicht die API, also kann ich das nicht ändern.
UPDATE:
Das ist irgendwie komisch. Ich fand eine Lösung, die Änderung meiner C# -Code:
using (var client = new System.Net.WebClient())
{
response = client.DownloadString(new Uri("http://example.com/name2id?names[]=john", true));
}
Notiere die boolean dontEscape
in Uri. Es ist eigentlich veraltet, aber es funktioniert? Kann das jemand erklären?
Ich denke, der einzige Weg herum ist, einen WebClient nicht zu verwenden, aber eine manuelle Anfrage mit einem normalen Socket, aber selbst dann wäre es nicht wirklich eine gültige Anfrage, so dass ich Würde mich wundern, wenn der Dienst es akzeptieren würde – Doggett
Sie könnten immer die Bereitstellung bitten, vernünftige Namen in ihren Argumenten zu verwenden und natürlich zu überprüfen, dass sie wirklich "[]" im Namen benötigen. Diese Anforderung erscheint mir ziemlich lächerlich. –
Siehe die aktualisierte. –