2013-06-20 17 views
25

Mam stronę internetową ASP.NET MVC. Jedna z moich tras to URL, która przyjmuje 5 parametrów. W celu zilustrowania te parametry mają nazwy: parameter1, parameter2, parameter3, parameter4 i . Obecnie tworzę adres URL w kodzie C#, który będzie POST na akcję mvc poprzez WebClient. że kod wygląda następująco:Wyślij żądanie POST do asp.net akcji mvc za pośrednictwem Fiddler

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)); 

Jestem przekonany, że metoda UploadString robi POST. Muszę wykonać POST, ponieważ moje wartości parametrów mogą być bardzo długie. W rzeczywistości szacuję, że czasami całkowita długość adresu URL może wynosić 20000 znaków. Niezależnie od tego, gdy próbuję opublikować moje dane, otrzymuję numer 400 error. W celu debugowania tego, próbuję dowiedzieć się, jak symulować POST w Fiddler.

Zakładając, że przekazuję wartości za pomocą ciągu zapytania, jak pokazano powyżej, jakie wartości należy wprowadzić w Fiddler? Z zakładki Composer nie wiem, co wpisać w obszarze Request Headers. Nie jestem też całkowicie pewien, co wpisać w adresie URL. Nie jestem pewien, czy umieściłem tam cały adres URL, łącznie z wartościami parametrów, czy te należące do Request Headers.

Co muszę wprowadzić w Fiddler, aby móc debugować mój problem?

+0

dlaczego nie napisać mały klient C#, który księguje do niego? Chociaż znam tylko podstawy Fiddlera – Jonesopolis

+0

Nie ma takiego przeciążenia 'UploadStringAsync', co pokazałeś w swoim pytaniu. Gdzie przekazujesz rzeczywistą zawartość tego żądania POST? Wydaje się, że w pytaniu wspomniałeś o pewnych parametrach łańcucha zapytania, ale nie ma takich parametrów. Twoje parametry wydają się być przekazywane jako część ścieżki adresu URL. –

+1

_ "W celu debugowania tego, próbuję dowiedzieć się, jak symulować POST w skrzypku." _ - możesz również pozwolić serwerowi zarejestrować błąd i sprawdzić to. Lub sprawdź żądanie, które twoja aplikacja robi. – CodeCaster

Odpowiedz

47

Zasadniczo wszystkie parametry są częścią adresu URL, a to jest źródłem problemu. Oto, co się dzieje: uderzasz w ograniczenie długości adresu URL i otrzymujesz błąd "400 Zły wniosek". W rzeczywistości większość przeglądarek internetowych nie działa z adresami URL zawierającymi więcej niż 2000 znaków.

Aby rozwiązać ten problem, proponuję trochę refaktoryzacji, aby żądanie zostało wysłane pod adres URL http://www.example.com/customer/parameter1/orders lub nawet http://www.example.com/customer/orders z parametrami wysyłanymi w treści żądania. Oto jak Test taki wniosek w Skrzypek:

  1. Na Composer zakładka wybrać POST żądania czasownik
  2. Określ adres URL jako

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

    lub

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

  3. W Request Headers sekcji można ustawić typ zawartości nagłówka jak

    Content-Type: application/x-www-form-urlencoded 
    

    lub jakikolwiek inny cel można wymagać. Lub po prostu zostaw to puste, które zadziała w twoim przypadku.

  4. Wreszcie w Request Body listy pól twoje parametry zapytań postaci strun

    parameter1name=parameter1value&parameter2name=parameter2value 
    

w tym nowym przypadku Oto jak można wysłać taki wniosek za pomocą 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); 
+0

Jak zaktualizować mój kod WebClient, aby przekazać te informacje w formacie, który wyświetlasz? –

+0

@EelsFan, 'WebClient.UploadStringAsync' ma przeciążenie, które akceptuje parametry w postaci ciągu zapytania. Zobacz aktualizację. – Andrei

+0

Widzę aktualizację, teraz zastanawiam się, czy muszę zaktualizować moją trasę. Moja trasa to obecnie route.MapRoute ( nazwa: "OrderInfo", adres URL: "customer/{parametr1}/zamówienia/{parametr2}/{parametr3}/{parametr4}/{parametr5}", domyślne ustawienia: nowy {kontroler = "Klient", akcja = "CustomerOrder"} ); –

6

I po prostu naśladuj dokładne żądanie, które zostało wysłane.

To jak to zrobić:

  1. Otwarte Fiddler
  2. Przejdź do strony, że chcesz ponownie wydać polecenie tj powtórzyć krok na owady, ale uważaj na żądanie na liście
  3. wybrać go z listy i kliknij prawym przyciskiem myszy, przejdź do odtworzenia> wznowienie i edytować
  4. Ten zbudować replikowane prośbę ale uderza punkt przerwy przed wysłaniem (Pojawi się czerwony pasek po prawej)
  5. Above to możesz edytować wartości, które zostały wysłane przez dwukrotne kliknięcie na każdy z nich w nagłówki, kwerendy itp
  6. następnie uderzył Uruchom, aby wypełnić
Powiązane problemy