Отправьте запрос POST на asp.net mvc action через Fiddler
У меня есть веб-сайт ASP.NET MVC
. Один из моих маршрутов - URL
, который принимает 5 параметров. Для иллюстрации эти параметры называются parameter1
, parameter2
, parameter3
, parameter4
и parameter5
. В настоящее время я создаю URL-адрес в некотором C#
коде, который будет POST
для действия mvc через WebClient
. этот код выглядит следующим образом:
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));
Я уверен, что метод UploadString
делает POST
. Мне нужно сделать POST
, потому что мои значения параметров могут быть очень длинными. Фактически, я считаю, что иногда общая длина URL-адреса может составлять 20000 символов. Несмотря на это, я получаю 400 error
при попытке опубликовать свои данные. Чтобы отладить это, я пытаюсь понять, как имитировать POST
в Fiddler
.
Предполагая, что я передаю значения через строку запроса, как показано выше, какие значения я могу ввести в Fiddler
? На вкладке Composer
я не уверен, что ввести в область Request Headers
. Я также не совсем уверен, что нужно вводить для URL. Я не уверен, что я помещаю туда весь URL, включая значения параметров, или если они принадлежат к Request Headers
.
Что мне нужно для входа в Fiddler
, чтобы я мог отлаживать свою проблему?
Ответы
Ответ 1
В принципе, все ваши параметры являются частью URL-адреса, и это корень вашей проблемы. Вот что происходит: вы нажимаете ограничение длины URL и получаете ошибку "400 Bad request". В реальном мире большинство веб-браузеров не работают с URL длиной более 2000 символов.
Чтобы решить эту проблему, я бы предложил сделать немного рефакторинга, чтобы запрос был отправлен на URL http://www.example.com/customer/parameter1/orders
или даже http://www.example.com/customer/orders
с параметрами, отправляемыми в тело запроса. Вот как протестировать такой запрос в Fiddler:
- На вкладке
Composer
выберите POST
глагол запроса
-
Укажите URL как
http://www.example.com/customer/parameter1/orders
или
http://www.example.com/customer/orders
-
В разделе Request Headers
вы можете установить заголовок типа контента, например
Content-Type: application/x-www-form-urlencoded
или любой другой заголовок, который может потребоваться. Или просто оставьте поле пустым, которое будет работать в вашем случае.
-
Наконец, в поле Request Body
укажите ваши параметры в форме строки запроса
parameter1name=parameter1value¶meter2name=parameter2value
В этом новом случае вы можете отправить такой запрос с помощью 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);
Ответ 2
Я просто имитирую точный запрос, который был отправлен.
Вот как я это делаю:
- Open Fiddler
- Перейдите на страницу, которую я хочу повторно выпустить, например, повторите шаг с ошибкой, но следите за запросом в списке
- Выберите его из списка и щелкните правой кнопкой мыши, перейдите в режим воспроизведения > переиздать и отредактировать
- Это создаст реплицированный запрос, но ударит точку прерывания перед отправкой (справа вы увидите красную полосу)
- Над этим вы можете редактировать значения, которые были отправлены двойным щелчком по любому из них в заголовках, QueryString и т.д.
- Затем нажмите Run to Complete