2013-06-20 16 views
25

Ich habe eine ASP.NET MVC Website. Eine meiner Routen ist eine URL, die 5 Parameter benötigt. Zur Veranschaulichung werden diese Parameter als parameter1, parameter2, parameter3, parameter4 und bezeichnet. Derzeit konstruiere ich eine URL in einem C# Code, der POST an die MVC-Aktion über eine WebClient. dass Code sieht wie folgt aus:Senden Sie POST-Anfrage an asp.net mvc Aktion über 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)); 

Ich bin zuversichtlich, dass die UploadString Methode funktioniert ein POST. Ich muss einen POST tun, weil meine Parameterwerte sehr lang sein können. In der Tat schätze ich, dass die gesamte URL-Länge gelegentlich 20000 Zeichen lang sein kann. Unabhängig davon bekomme ich eine 400 error, wenn ich versuche, meine Daten zu posten. In dem Bemühen, dies zu debuggen, versuche ich herauszufinden, wie man eine POST in Fiddler simulieren kann.

Angenommen, dass ich Werte über eine Abfragezeichenfolge wie oben gezeigt übergebe, welche Werte gebe ich in Fiddler ein? Von der Registerkarte Composer bin ich nicht sicher, was ich für den Bereich Request Headers eingeben soll. Ich bin mir auch nicht ganz sicher, was ich für die URL eingeben soll. Ich bin mir nicht sicher, ob ich die gesamte URL einschließlich der Parameterwerte dort hineinlege oder ob diese in die Request Headers gehören.

Was muss ich in Fiddler eingeben, damit ich mein Problem debuggen kann?

+0

warum nicht einen winzigen C# Client, den es schreiben? Obwohl ich nur die Grundlagen von Fiddler kenne – Jonesopolis

+0

Es gibt keine solche Überladung von 'UploadStringAsync' als das was du in deiner Frage gezeigt hast. Wo übergeben Sie die tatsächliche Nutzlast dieser POST-Anfrage? Sie haben auch einige Abfragezeichenfolgenparameter in Ihrer Frage erwähnt, aber solche Parameter gibt es nicht. Ihre Parameter scheinen als Teil des Pfadabschnitts der URL übergeben zu werden. –

+1

_ "In dem Bemühen, dies zu debuggen, versuche ich herauszufinden, wie man einen POST in Fiddler simuliert." _ - Sie können den Server auch einfach den Fehler protokollieren lassen und diesen untersuchen. Oder überprüfen Sie die Anfrage, die Ihre Anwendung stellt. – CodeCaster

Antwort

47

Grundsätzlich sind alle Ihre Parameter ein Teil der URL, und dies ist die Wurzel Ihres Problems. Hier ist Folgendes: Sie treffen die URL-Längenbeschränkung und erhalten den Fehler "400 ungültige Anfrage". In der realen Welt arbeiten die meisten Webbrowser nicht mit URLs, die länger als 2000 Zeichen sind.

Um dieses Problem zu beheben, würde ich vorschlagen, ein wenig Refactoring zu tun, so dass die Anfrage an die URL http://www.example.com/customer/parameter1/orders oder sogar http://www.example.com/customer/orders mit Parametern gesendet in Anfrage Körper gebucht wird. Hier ist, wie Test ein solcher Antrag in Fiddler:

  1. Auf Composer Registerkarte wählen POST Anfrage Verb
  2. Geben Sie die URL als

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

    oder

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

  3. In Request Headers Abschnitt können Sie Header Inhaltstyp wie

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

    oder jede andere Header gesetzt Sie benötigen könnten. Oder lass es einfach leer, was in deinem Fall funktioniert.

  4. schließlich in Request Body Feldliste Ihre Parameter in Query-String-Form

    parameter1name=parameter1value&parameter2name=parameter2value 
    

In diesem neuen Fall hier, wie Sie eine solche Anfrage WebClient mit schicken:

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

Wie aktualisiere ich dann meinen WebClient-Code, um diese Informationen in dem von Ihnen angezeigten Format weiterzugeben? –

+0

@EelsFan, 'WebClient.UploadStringAsync' hat eine Überladung, die Parameter in der Abfragezeichenfolgeform akzeptiert. Bitte sehen Sie update. – Andrei

+0

Ich sehe das Update, jetzt frage ich mich, ob ich meine Route aktualisieren muss. Meine Route ist derzeit routes.MapRoute ( Name: "OrderInfo", URL: "Kunde/{Parameter1}/Aufträge/{Parameter2}/{Parameter3}/{Parameter4}/{Parameter5}", Standard: neu {Controller = "Kunde", action = "CustomerOrder"} ); –

6

I simulieren Sie einfach die genaue Anfrage, die gesendet wurde.

Dies ist, wie ich es tun:

  1. öffnen Fiddler
  2. Gehen Sie auf die Seite, die ich den Befehl dh wiederholen Sie den Bug Schritt re-issue wollen, aber für die Anforderung in der Liste sehen
  3. Wählen Sie
  4. es aus der Liste und der rechten Maustaste, gehen Sie zu wiederholen> Reissue und bearbeiten
  5. Diese bauen eine replizierte Anfrage aber trifft einen Haltepunkt, bevor es gesendet wird
  6. oben (Sie werden den roten Balken auf der rechten Seite) das kannst du bearbeiten die Werte, die durch einen Doppelklick auf einen von ihnen in Header gesendet wurde, Abfrage-Zeichenfolge etc
  7. Dann laufen treffen Complete
Verwandte Themen