Je dois consommer un service qui prend un paramètre GET nommé "names []".Empêche le C# des parenthèses d'encodage dans la chaîne de requête
Par exemple: GET http://example.com/name2id?names []=john
Lorsque je tente de consommer que C# en utilisant un WebClient, les supports est encodée à% 5B% 5D, dont les Servies ne comprend pas. Lorsque j'envoie ce qui précède en utilisant mon navigateur (non-codé), tout fonctionne bien.
Heres l'exemple qui ne fonctionne pas:
using (var client = new System.Net.WebClient())
{
response = client.DownloadString(new Uri("http://example.com/name2id?names[]=john"));
}
Contrôlée par Fiddler, Heres la demande:
GET http://example.com/name2id?names%5B%5D=john HTTP/1.1
Host: example.com
Connection: Keep-Alive
est-il un moyen de rendre le cadre codait pas l'URL, ou un autre moyen de contourner ce problème?
P.S. Je ne contrôle pas l'API, donc je ne peux pas changer ça.
MISE À JOUR:
C'est un peu bizarre. J'ai trouvé une solution, changer mon code C# à:
using (var client = new System.Net.WebClient())
{
response = client.DownloadString(new Uri("http://example.com/name2id?names[]=john", true));
}
Notez le dontEscape
booléenne à Uri. C'est en fait obsolète, mais ça marche? Quelqu'un peut-il expliquer cela? Comme je comprends RFC2396 [] ne sont pas des caractères valides dans un URI
Je pense que la seule façon de contourner est de ne pas utiliser un client Web mais de faire une demande manuelle en utilisant un socket normal, mais même alors, ce ne serait pas vraiment une demande valide, donc je se demander si le service l'accepterait – Doggett
Vous pouvez toujours demander à fournir d'utiliser des noms raisonnables dans leurs arguments, et bien sûr vérifier qu'ils exigent vraiment "[]" dans le nom. Cette exigence me semble plutôt ridicule. –
Voir la mise à jour. –