J'ai un ASP.NET MVC
site Internet. Un de mes itinéraires est un URL
qui prend 5 paramètres. Par exemple, ces paramètres sont nommés parameter1
, parameter2
, parameter3
, parameter4
, et parameter5
. Actuellement, je construis une URL dans certains C#
code qui va POST
à l'action mvc via un WebClient
. ce code ressemble à ceci:
WebClient myWebClient = new WebClient();
myWebClient.UploadStringCompleted += myWebClient_UploadStringCompleted;
string url = "http://www.example.com/customer/" + parameter1 + "/orders/" + parameter2 + "/" + parameter3 + "/" + parameter4 + "/" + parameter5;
myWebClient.UploadStringAsync(new Uri(url, UriKind.Absolute));
Je suis convaincu que la méthode UploadString
fait un POST
. J'ai besoin de faire un POST
, car mes valeurs de paramètres peuvent être très longues. En fait, j'estime qu'à l'occasion, la longueur totale de l'URL peut être de 20000 caractères. Quoi qu'il en soit, je reçois un 400 error
lorsque j'essaie de publier mes données. Dans un effort pour déboguer cela, j'essaie de comprendre comment simuler un POST
dans Fiddler
.
En supposant que je passe des valeurs via une chaîne de requête comme indiqué ci-dessus, quelles valeurs dois-je entrer dans Fiddler
? Dans l'onglet Composer
, je ne sais pas quoi saisir pour le Request Headers
zone. Je ne sais pas non plus trop quoi saisir pour l'URL. Je ne sais pas si j'y ai mis l'URL complète, y compris les valeurs des paramètres, ou si celles-ci appartiennent au Request Headers
.
De quoi ai-je besoin pour entrer dans Fiddler
, afin de pouvoir déboguer mon problème?
Fondamentalement, tous vos paramètres font partie de l'URL, et c'est la racine de votre problème. Voici ce qui se passe: vous atteignez la limite de longueur d'URL et recevez une erreur "400 Bad request". Dans le monde réel, la plupart des navigateurs Web ne fonctionnent pas avec des URL de plus de 2 000 caractères.
Pour résoudre ce problème, je suggère de refaire un peu la refactorisation, afin que cette demande soit publiée sur l'URL http://www.example.com/customer/parameter1/orders
ou même http://www.example.com/customer/orders
avec paramètres envoyés dans le corps de la requête. Voici comment tester une telle demande dans Fiddler:
Composer
, choisissez POST
verbe de requêteSpécifiez l'URL comme
http://www.example.com/customer/parameter1/orders
ou
Dans Request Headers
section, vous pouvez définir un en-tête de type de contenu comme
Content-Type: application/x-www-form-urlencoded
ou tout autre en-tête dont vous pourriez avoir besoin. Ou laissez-le simplement vide, ce qui fonctionnera dans votre cas.
Enfin dans Request Body
champ liste vos paramètres sous forme de chaîne de requête
parameter1name=parameter1value¶meter2name=parameter2value
Dans ce nouveau cas, voici comment envoyer une telle demande en utilisant WebClient
:
WebClient myWebClient = new WebClient();
myWebClient.UploadStringCompleted += myWebClient_UploadStringCompleted;
string url = "http://www.example.com/customer/orders";
string data = "parameter1name=parameter1value¶meter2name=parameter2value";
myWebClient.UploadStringAsync(new Uri(url, UriKind.Absolute), data);
J'imite simplement la demande exacte qui a été envoyée.
Voici comment je le fais: