web-dev-qa-db-fra.com

Envoyer POST requête à l'action mvc asp.net via Fiddler

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?

25
Eels Fan

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:

  1. Dans l'onglet Composer, choisissez POST verbe de requête
  2. Spécifiez l'URL comme

    http://www.example.com/customer/parameter1/orders

    ou

    http://www.example.com/customer/orders

  3. 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.

  4. Enfin dans Request Body champ liste vos paramètres sous forme de chaîne de requête

    parameter1name=parameter1value&parameter2name=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&parameter2name=parameter2value";

myWebClient.UploadStringAsync(new Uri(url, UriKind.Absolute), data);
47
Andrei

J'imite simplement la demande exacte qui a été envoyée.

Voici comment je le fais:

  1. Open Fiddler
  2. Accédez à la page sur laquelle je souhaite relancer la commande, c'est-à-dire répétez l'étape du bogue, mais surveillez la demande dans la liste
  3. Sélectionnez-le dans la liste et faites un clic droit, allez à rejouer> rééditer et éditer
  4. Cela génère une demande répliquée mais atteint un point d'arrêt avant son envoi (vous verrez la barre rouge à droite)
  5. Au-dessus de cela, vous pouvez modifier les valeurs qui ont été envoyées en double-cliquant sur l'une d'entre elles dans Headers, QueryString, etc.
  6. Appuyez ensuite sur Exécuter pour terminer
6
hutchonoid