Как получить данные POST как массив с C#

я разрабатываю ASP.NET обработчик с C#, который получает массив данных, отправленных из внешней Флэш-программы. Как я могу использовать данные в виде массива? Кажется, контекст HTTP используется в ASP.NET автоматически html-декодирует данные post так, чтобы они выходили в виде простой строки. Разделитель в этом случае-запятая (может быть, это всегда запятая, никогда не работавшая с этим раньше).

кажется, мне нужно одно из двух:

1) способ получить данные в html-кодировке форма, где запятая, используемая в качестве разделителя для массивов, может представлять только реальные массивы вместо ввода формы клиента (запятая ввода клиента останется закодированной на данный момент).

2) способ имитации PHP print_r(), var_dump() функция (сам не знаю PHP, но мне сказали, что это делает трюк), чтобы сбросить переменную в массив.

поэтому любая помощь в том, как это сделать, будет оценена. Заранее спасибо!

Edit 1: данные публикации могут быть, например, куча адресов, postalcodes и дополнительная информация. Такие как address=testroad%5F5,another%5Ftestroad%5F6&postalcode=12345,56789&extrainfo=,firstwasempty. В этом примере было два адреса (%5F равно пробелу), два посталькода, но только второй адрес содержал extrainfo поскольку пространство перед запятой было пустым. Теперь еще раз, поскольку английский не является моим родным языком, проблема заключалась в том, что возможная запятая, написанная клиентом, смешивается с фактической запятой разделения массива после декодирования.

4 ответов


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
            }
        }
    }
}

У меня была такая же проблема и я нашел этот пост, но только что я нашел лучший способ сделать это.

вы должны поместить одно и то же имя во все переменные POST, поэтому данные для публикации:

address=AddressValue1&address=AddressValue2&address=AddressValue3

в скрипте кода C# вы можете получить доступ к параметрам данных с помощью:

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

нашел

Request.Params[null]

относится к необработанным данным, размещенным на странице в C# ASP.NET.


Проверьте HttpRequest.Свойство InputStream: http://msdn.microsoft.com/en-us/library/system.web.httprequest.inputstream.aspx