Soru Fiddler üzerinden asp.net mvc eylemine POST isteği gönder


Benim bir ASP.NET MVC Web sitesi. Benim rotalarımdan biri URL Bu 5 parametre alır. İllüstrasyon için, bu parametreler adlandırılmıştır. parameter1, parameter2, parameter3, parameter4, ve parameter5. Şu anda, bazılarında bir URL yapıyorum C# olacak kod POST üzerinden mvc eylemi WebClient. Bu kod şöyle görünüyor:

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

Ben eminim ki UploadString yöntem bir POST. Yapmam gerek POSTÇünkü parametre değerlerim çok uzun olabilir. Aslında, bazen, toplam url uzunluğunun 20000 karakter uzunluğunda olabileceğini tahmin ediyorum. Ne olursa olsun, bir 400 error Verilerimi göndermeye çalıştığımda. Bunu hata ayıklama çabasıyla, bir benzetimin nasıl yapıldığını anlamaya çalışıyorum. POST içinde Fiddler.

Değerleri yukarıda gösterildiği gibi bir sorgu dizesi üzerinden geçirdiğimi varsayarsak, hangi değerleri girerim? Fiddler? İtibaren Composer sekmesi, ne gireceğime emin değilim Request Headers alanı. Ayrıca, URL’ye neyin girileceğinden emin değilim. Parametre değerleri de dahil olmak üzere, tüm URL’yi buraya koyup koymadığımdan emin değilim. Request Headers.

Ne girmem gerekiyor Fiddler, böylece sorunumu debug edebilir miyim?


25
2018-06-20 13:55


Menşei


Neden küçük bir c # müşteri o POSTS yazmıyoruz? Yine de sadece Fiddler'ın temellerini biliyorum - Jonesopolis
Böyle aşırı bir yük yok UploadStringAsync sorunuzda göstermiş olduğunuz gibi. Bu POST isteğinin gerçek yükünü nereden geçiriyorsunuz? Ayrıca sorunuzda bazı sorgu dizesi parametrelerinden bahsetmişsiniz gibi görünüyor, ancak böyle bir parametre yok. Parametrelerin, URL'nin yol bölümünün bir parçası olarak geçirildiği görülüyor. - Darin Dimitrov
"Bunu hata ayıklama çabasıyla, Fiddler'da bir POST'u nasıl simüle edeceğimi anlamaya çalışıyorum." - Ayrıca sunucunun hatayı günlüğe kaydetmesine ve denetlemesine izin verebilirsiniz. Veya başvurunuzun yaptığı talebi inceleyin. - CodeCaster


Cevaplar:


Temel olarak, tüm parametrelerinizin bir kısmı URL’dir ve bu, sorunun kökenidir. İşte neler oluyor: URL uzunluğu sınırlamasına ulaşıyorsunuz ve "400 Hatalı istek" hatası alıyorsunuz. Gerçek dünyada çoğu web tarayıcısı, 2000 karakterden uzun URL'lerle çalışmaz.

Bu sorunu çözmek için, biraz geri çekilmeyi öneririm. Böylece, istek URL'ye gönderilir http://www.example.com/customer/parameter1/orders ya da http://www.example.com/customer/orders Parametreler ile istek gövdesinde gönderin. Fiddler'da böyle bir talebi test etmek için:

  1. üzerinde Composer sekme seç POST istek fiili
  2. URL'yi şu şekilde belirtin:

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

    veya

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

  3. İçinde Request Headers bölüm gibi içerik türü üstbilgisini ayarlayabilirsiniz

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

    veya isteyebileceğiniz başka bir başlık. Ya da sizin durumunuzda çalışacak olan boş bırakın.

  4. Sonunda Request Body sorgulama dizesi formundaki parametrelerinizi listeler

    parameter1name=parameter1value&parameter2name=parameter2value
    

Bu yeni durumda, böyle bir isteği kullanarak nasıl gönderebilirsiniz 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
2018-06-20 14:14



Sonra, bu bilgileri gösterdiğiniz biçimde geçirmek için WebClient kodumu nasıl güncellerim? - Eels Fan
@EelsFan, WebClient.UploadStringAsync sorgu dizesi formundaki parametreleri kabul eden bir aşırı yüklenme var. Lütfen güncellemeye bakın. - Andrei
Güncellemeyi görüyorum, şimdi rotamı güncellemem gerekip gerekmediğini merak ediyorum. Rotam şu anda rotalar.MapRoute (name: "OrderInfo", url: "customer / {parameter1} / orders / {parameter2} / {parameter3} / {parameter4} / {parameter5}", defaults: new {controller = "Müşteri ", action =" CustomerOrder "}); - Eels Fan
@EelsFan, evet, bazı güncellemelere de ihtiyacı var. Parametreleri artık URL'nin parçası olmadığından kaldır. Ancak onları eylem yönteminin parametreleri olarak bırakın - ASP.NET MVC hala istek gövdesini eylem parametrelerine eşleştirebilir. - Andrei
çok havalı! Hiç bir fikrim yoktu. Ona bir şans vermeliyim. - Eels Fan


Sadece gönderilen tam talebi taklit ediyorum.

Ben böyle yaparım:

  1. Fiddler'ı aç
  2. Komutu yeniden vermek istediğim sayfaya gidin, yani hata adımını tekrarlayın, ancak listedeki isteği izleyin.
  3. Listeden seçin ve sağ tıklayın, tekrar oynat> yeniden yayınla ve düzenle
  4. Bu, çoğaltılmış bir istek oluşturur, ancak gönderilmeden önce bir kesme noktasına ulaşır (Sağdaki kırmızı çubuğu görürsünüz)
  5. Bunların üzerinde, herhangi birindeki Başlık, QueryString vb. Üzerine çift tıklayarak gönderilen değerleri düzenleyebilirsiniz.
  6. Ardından Tamamlamak için Run'a basın

6
2018-06-20 14:18