2009-12-01 25 views
6

Estoy desarrollando un controlador ASP.NET con C# que recibe una matriz de datos publicados desde un programa Flash externo. ¿Cómo puedo usar los datos como una matriz? Parece que el contexto HTTP utilizado en ASP.NET descifra html automáticamente los datos de la publicación para que salga como una cadena simple. El separador en este caso es una coma (podría ser siempre una coma, nunca antes había trabajado con esto).Cómo obtener datos POST como matriz con C#

Parece que necesito una de dos cosas:

1) Una forma de llegar a los datos en su forma codificada en HTML, en el que se utiliza la coma como separador de las matrices sólo puede representar matrices reales en lugar de cliente entrada de formulario (la coma de entrada del cliente permanecería codificada en este punto).

2) Una forma de simular la función PHP print_r(), var_dump() (no conozco PHP por mi cuenta, pero me dicen que es el truco) para volcar la variable en una matriz.

Así que cualquier ayuda sobre cómo hacer cualquiera sería apreciada. ¡Gracias por adelantado!

Editar 1: Los datos que se publican pueden ser, por ejemplo, un grupo de direcciones, códigos postales e información adicional opcional. Tal como address=testroad%5F5,another%5Ftestroad%5F6&postalcode=12345,56789&extrainfo=,firstwasempty. En ese ejemplo, había dos direcciones (%5F es igual a espacio en blanco), dos códigos postales, pero solo la segunda dirección contenía extrainfo como el espacio antes de que la coma estuviera vacía. Ahora, una vez más, como el inglés no es mi idioma materno, el problema fue que la posible coma escrita por el cliente se mezcla con la coma real de división de la matriz después de la decodificación.

Respuesta

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

Gracias por esto, se obtiene la información. El problema es analizarlo como habrás adivinado. Los datos que intento obtener son un conjunto de direcciones, por ejemplo, "dirección", "código postal", etc. Se vuelve problemático al analizar eso con bucles y subcadenas. Entonces, ¿hay alguna manera de obtener los datos como formulario o "querystring" sin decodificar los datos dentro? – Kahn

+0

He actualizado mi respuesta con un ejemplo que muestra cómo podría usar String.Split para analizar los datos publicados. –

+0

es una publicación muy antigua, pero para cualquiera que la vea ahora, hay una mejor manera de hacerlo con Json. var reader = new StreamReader (context.Request.InputStream) string postingData = reader.ReadToEnd(); JObject obj = JObject.Parse (postedData); Ahora puedes acceder al obj usando la tecla. var user = (string) obj ["UserID"]; – Blossom

2

he encontrado

Request.Params[null] 

se refiere a los datos brutos publicados en la página en C# ASP.NET.

15

Tuve el mismo problema y encontré esta publicación, pero justo ahora he encontrado una mejor manera de hacerlo.

Usted debe poner el mismo nombre en todas las variables POST, por lo que los datos que se han publicado es:

dirección = AddressValue1 & dirección = AddressValue2 & dirección = AddressValue3

En el C# código de secuencia de comandos a continuación, puede acceder a los parámetros de datos con:

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

¡Gracias!Ojalá pudiera votar más de una vez. – Clox

Cuestiones relacionadas