2013-06-20 33 views
25

Tôi có một trang web ASP.NET MVC. Một trong các tuyến đường của tôi là URL có 5 thông số. Để minh hoạ, các thông số này có tên là parameter1, parameter2, parameter3, parameter4parameter5. Hiện tại, tôi đang tạo URL trong một số mã số C# sẽ POST cho hành động mvc qua một số WebClient. mã đó trông giống như sau:Gửi yêu cầu POST đến hành động asp.net mvc qua 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)); 

Tôi tự tin rằng phương thức UploadString thực hiện POST. Tôi cần phải thực hiện một số POST, bởi vì các giá trị tham số của tôi có thể rất dài. Trong thực tế, tôi ước tính đôi khi, tổng chiều dài url có thể dài 20000 ký tự. Bất kể, tôi nhận được 400 error khi tôi cố đăng dữ liệu của mình. Trong nỗ lực gỡ lỗi này, tôi đang cố gắng tìm ra cách mô phỏng một số POST trong Fiddler.

Giả sử rằng tôi đang chuyển giá trị qua chuỗi truy vấn như được hiển thị ở trên, tôi nhập giá trị nào vào Fiddler? Từ tab Composer, tôi không chắc chắn nên nhập gì vào khu vực Request Headers. Tôi cũng không hoàn toàn chắc chắn những gì để nhập cho url. Tôi không chắc chắn nếu tôi đặt toàn bộ URL trong đó, bao gồm các giá trị tham số hoặc nếu các thuộc tính đó thuộc về số Request Headers.

Tôi cần nhập gì vào Fiddler để tôi có thể gỡ lỗi sự cố của mình?

+0

tại sao không viết một C# client nhỏ rằng bài viết để nó? Mặc dù tôi chỉ biết những điều cơ bản của Fiddler – Jonesopolis

+0

Không có quá tải như vậy của 'UploadStringAsync' như những gì bạn đã thể hiện trong câu hỏi của mình. Bạn đang chuyển tải trọng thực tế của yêu cầu POST này ở đâu? Ngoài ra bạn dường như đã đề cập đến một số tham số chuỗi truy vấn trong câu hỏi của bạn, nhưng không có bất kỳ thông số nào như vậy. Các thông số của bạn dường như được chuyển như một phần của phần đường dẫn của url. –

+1

_ "Trong một nỗ lực để gỡ lỗi này, tôi đang cố gắng tìm ra cách để mô phỏng một POST trong Fiddler." _ - bạn cũng có thể chỉ để cho máy chủ đăng nhập lỗi và kiểm tra điều đó. Hoặc kiểm tra yêu cầu mà ứng dụng của bạn thực hiện. – CodeCaster

Trả lời

47

Về cơ bản tất cả các tham số của bạn là một phần của URL và đây là gốc của sự cố của bạn. Đây là những gì đang diễn ra: bạn đang nhấn giới hạn độ dài URL và nhận được lỗi "400 yêu cầu không hợp lệ". Trong thế giới thực, hầu hết các trình duyệt web không hoạt động với các URL dài hơn 2000 ký tự.

Để giải quyết vấn đề này, tôi khuyên bạn nên thực hiện một chút tái cấu trúc, để yêu cầu đó được đăng lên URL http://www.example.com/customer/parameter1/orders hoặc thậm chí http://www.example.com/customer/orders với thông số gửi trong phần yêu cầu. Sau đây là cách kiểm tra yêu cầu như vậy trong Fiddler:

  1. On Composer tab chọn POST yêu cầu động từ
  2. Chỉ định URL như

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

    hoặc

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

  3. Trong Request Headers phần bạn có thể đặt tiêu đề kiểu nội dung như

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

    hoặc bất kỳ tiêu đề khác mà bạn có thể yêu cầu. Hoặc chỉ để trống nó sẽ hoạt động trong trường hợp của bạn.

  4. Cuối cùng trong Request Body danh sách lĩnh vực thông số của bạn ở dạng chuỗi truy vấn

    parameter1name=parameter1value&parameter2name=parameter2value 
    

Trong trường hợp mới này ở đây là làm thế nào bạn có thể gửi một yêu cầu như vậy sử dụng 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

Sau đó, làm cách nào để cập nhật mã WebClient của tôi để chuyển theo thông tin này theo định dạng bạn đang hiển thị? –

+0

@EelsFan, 'WebClient.UploadStringAsync' có quá tải chấp nhận tham số trong biểu mẫu chuỗi truy vấn. Vui lòng xem cập nhật. – Andrei

+0

Tôi thấy cập nhật, bây giờ tôi tự hỏi nếu tôi cần phải cập nhật tuyến đường của tôi mặc dù. Tuyến đường của tôi hiện đang định tuyến.MapRoute ( tên: "OrderInfo", url: "khách hàng/{parameter1}/đơn đặt hàng/{parameter2}/{parameter3}/{parameter4}/{parameter5}", mặc định: new {controller = "Khách hàng", hành động = "CustomerOrder"} ); –

6

tôi chỉ cần bắt chước yêu cầu chính xác đã được gửi.

Đây là cách tôi làm điều đó:

  1. mở Fiddler
  2. Tới trang mà tôi muốn phát hành lại lệnh tức là lặp lại các bước lỗi nhưng xem cho yêu cầu trong danh sách
  3. Chọn từ danh sách và nhấp chuột phải, vào phát lại> phát hành lại và chỉnh sửa
  4. Điều này xây dựng một yêu cầu được sao chép nhưng chạm vào điểm ngắt trước khi gửi (Bạn sẽ thấy thanh màu đỏ ở bên phải)
  5. điều này bạn có thể chỉnh sửa các giá trị đã được gửi bằng cách kích đúp vào bất kỳ trong số họ trong Headers, QueryString vv
  6. Sau đó nhấn Run để Hoàn
Các vấn đề liên quan