2009-12-01 45 views
6

Tôi đang phát triển trình xử lý ASP.NET có C# nhận một mảng dữ liệu được đăng từ chương trình Flash bên ngoài. Làm thế nào tôi có thể sử dụng dữ liệu dưới dạng mảng? Có vẻ như bối cảnh HTTP được sử dụng trong ASP.NET sẽ tự động giải mã html dữ liệu bài đăng để nó xuất hiện dưới dạng một chuỗi đơn giản. Dấu phân cách trong trường hợp này là dấu phẩy (có thể là dấu phẩy, chưa bao giờ làm việc với điều này trước đây).Cách nhận dữ liệu POST dưới dạng mảng với C#

Có vẻ tôi cần một trong hai điều:

1) Một cách để có được các dữ liệu ở dạng html mã hóa của nó, nơi mà các dấu phẩy được sử dụng như một dấu phân cách cho các mảng CHỈ có thể đại diện cho mảng thực sự thay vì khách hàng đầu vào biểu mẫu (dấu phẩy đầu vào của khách hàng sẽ vẫn được mã hóa tại thời điểm này).

2) Một cách để mô phỏng hàm PHP print_r(), var_dump() (không biết PHP bản thân mình, nhưng tôi được thông báo rằng có mẹo ở đó) để biến biến đó thành một mảng.

Vì vậy, mọi trợ giúp về cách thực hiện hoặc sẽ được đánh giá cao. Cảm ơn trước!

Chỉnh sửa 1: Dữ liệu đang được đăng có thể là ví dụ một loạt địa chỉ, mã bưu điện và thông tin bổ sung tùy chọn. Chẳng hạn như address=testroad%5F5,another%5Ftestroad%5F6&postalcode=12345,56789&extrainfo=,firstwasempty. Trong ví dụ đó, có hai địa chỉ (%5F bằng khoảng trắng), hai mã bưu chính, nhưng chỉ có địa chỉ thứ hai chứa extrainfo làm khoảng trắng trước khi dấu phẩy trống. Bây giờ một lần nữa, như tiếng Anh không phải là momtongue của tôi, vấn đề là dấu phẩy được viết bởi khách hàng có thể được trộn lẫn với dấu phẩy tách mảng thực tế sau khi giải mã.

Trả lời

7
public void ProcessRequest(HttpContext context) 
{ 
    using (var reader = new StreamReader(context.Request.InputStream)) 
    { 
     string postedData = reader.ReadToEnd(); 
     foreach (var item in postedData.Split(new [] { '&' }, StringSplitOptions.RemoveEmptyEntries)) 
     { 
      var tokens = item.Split(new [] { '=' }, StringSplitOptions.RemoveEmptyEntries); 
      if (tokens.Length < 2) 
      { 
       continue; 
      } 
      var paramName = tokens[0]; 
      var paramValue = tokens[1]; 
      var values = paramValue.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
      foreach (var value in values) 
      { 
       var decodedValue = context.Server.UrlDecode(value); 
       // Do something with the decoded value which corresponds to paramName 
      } 
     } 
    } 
} 
+0

Cảm ơn điều này, nó nhận dữ liệu. Vấn đề là phân tích cú pháp nó như bạn đoán. Các dữ liệu tôi đang cố gắng để có được tại là một loạt các địa chỉ, ví dụ "địa chỉ", "mã bưu điện" vv Nó được phân tích phiền hà mà với cho các vòng và các chất nền. Vậy có cách nào để lấy dữ liệu dưới dạng biểu mẫu hay "chuỗi truy vấn" mà không giải mã dữ liệu bên trong? – Kahn

+0

Tôi đã cập nhật câu trả lời của mình bằng ví dụ cho thấy cách bạn có thể sử dụng String.Split để phân tích cú pháp dữ liệu đã đăng. –

+0

một bài đăng rất cũ của nó, nhưng đối với bất kỳ ai nhìn thấy nó bây giờ, có một cách tốt hơn để làm điều đó bằng cách sử dụng Json. var reader = new StreamReader (context.Request.InputStream) string postedData = reader.ReadToEnd(); JObject obj = JObject.Parse (postedData); Bây giờ bạn có thể truy cập obj bằng cách sử dụng phím. var user = (string) obj ["UserID"]; – Blossom

2

tôi thấy

Request.Params[null] 

đề cập đến dữ liệu RAW được đưa lên trang trong C# ASP.NET.

15

Tôi đã gặp sự cố tương tự và tìm thấy bài đăng này, nhưng bây giờ tôi đã tìm thấy cách tốt hơn để thực hiện.

Bạn nên đặt cùng tên trên tất cả các biến POST, do đó dữ liệu được đăng là:

địa chỉ = AddressValue1 & địa chỉ = AddressValue2 & địa chỉ = AddressValue3

Trong C# sau đó bạn có thể truy cập vào các tham số dữ liệu với:

string[] addresses = this.Request.Form.GetValues("address"); 
foreach (string address in addresses) 
{ 
    // Your code here ... 
} 
+1

Cảm ơn bạn!Ước gì tôi có thể upvote nhiều hơn một lần. – Clox

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