Подтвердить что ты не робот

Отправьте запрос 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, чтобы я мог отлаживать свою проблему?

4b9b3361

Ответ 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&parameter2name=parameter2value
    

В этом новом случае вы можете отправить такой запрос с помощью 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);

Ответ 2

Я просто имитирую точный запрос, который был отправлен.

Вот как я это делаю:

  • Open Fiddler
  • Перейдите на страницу, которую я хочу повторно выпустить, например, повторите шаг с ошибкой, но следите за запросом в списке
  • Выберите его из списка и щелкните правой кнопкой мыши, перейдите в режим воспроизведения > переиздать и отредактировать
  • Это создаст реплицированный запрос, но ударит точку прерывания перед отправкой (справа вы увидите красную полосу)
  • Над этим вы можете редактировать значения, которые были отправлены двойным щелчком по любому из них в заголовках, QueryString и т.д.
  • Затем нажмите Run to Complete