Как получить данные 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 ...
}
Проверьте HttpRequest.Свойство InputStream: http://msdn.microsoft.com/en-us/library/system.web.httprequest.inputstream.aspx