2010-10-15 35 views
7

Tôi đã có một ứng dụng .net có một WebRequest rằng một POST thêm nhiều lần cùng một khóa, do đó biến nó thành một mảng trong mắt của PHP, Java Servlets vv Tôi muốn viết lại điều này để sử dụng WebClient, nhưng nếu tôi gọi QueryClring.Add() của WebClient với cùng một khóa nhiều lần, nó chỉ thêm các giá trị mới, tạo một giá trị đơn được phân cách bằng dấu phẩy thay vì một mảng giá trị.POST'ing mảng trong WebClient (C# /. Net)

Tôi đăng yêu cầu của mình bằng cách sử dụng UploadFile của WebClient() vì ngoài các siêu dữ liệu này tôi muốn một tệp được đăng.

Tôi làm cách nào để sử dụng WebClient để đăng một mảng giá trị thay vì một giá trị đơn lẻ (giá trị được phân tách bằng dấu phẩy)?

Cheers

Nik

Trả lời

5

PHP đơn giản là sử dụng một bộ phân tích để chuyển đổi nhiều giá trị gửi với định dạng mảng vào một mảng. Định dạng là <arrayName>[<key>].

Vì vậy, nếu bạn muốn nhận một mảng trong PHP từ $_GET, hãy thêm các tham số truy vấn sau: x[key1]x[key2]. $_GET['x'] trong PHP sẽ là một mảng với 2 mục: ["x"]=> array(2) { ["key1"]=> <whatever> ["key2"]=> <whatever> }.

Sửa - bạn có thể thử phương pháp này mở rộng:

public static class WebClientExtension 
{ 
    public static void AddArray(this WebClient webClient, string key, params string[] values) 
    { 
     int index = webClient.QueryString.Count; 

     foreach (string value in values) 
     { 
      webClient.QueryString.Add(key + "[" + index + "]", value); 
      index++; 
     } 
    } 
} 

và trong mã:

webClient.AddArray("x", "1", "2", "3"); 
webClient.AddArray("x", "4"); 

hoặc bằng tay:

webClient.QueryString.Add("x[key1]", "4"); 
webClient.QueryString.Add("x[key2]", "1"); 

Không có kiểm tra lỗi, vv Bạn có thể tự làm điều đó :)

+0

Đúng, đó là cách PHP phân tích một mảng. Nhưng WebClient, theo như tôi biết, thay vào đó sẽ cung cấp cho ["x"] = "bất cứ điều gì, bất cứ điều gì", mà không phải là những gì tôi muốn gửi. Bạn có bất cứ đề nghị làm thế nào tôi làm cho WebClient hoạt động chính xác? – niklassaers

+0

@niklassaers: với 'webClient.QueryString.Add (" x [key1] "," 4 ");' và 'webClient.QueryString.Add (" x [key2] "," 3 ");' Tôi luôn kết thúc- với một mảng trong '$ _GET'. Phiên bản PHP của tôi là 5.3.2. –

+0

Cảm ơn lời khuyên, tôi sẽ cung cấp cho nó một whirl thứ hai. :-) – niklassaers

Các vấn đề liên quan