Подтвердить что ты не робот

Передача значений массива в HTTP-запросе в .NET.

Каков стандартный способ передачи и обработки массива в HTTP-запросе в .NET? У меня есть решение, но я не знаю, подходит ли ему лучший подход.

Здесь мое решение:

<form action="myhandler.ashx" method="post">
    <input type="checkbox" name="user" value="Aaron" />
    <input type="checkbox" name="user" value="Bobby" />
    <input type="checkbox" name="user" value="Jimmy" />
    <input type="checkbox" name="user" value="Kelly" />
    <input type="checkbox" name="user" value="Simon" />
    <input type="checkbox" name="user" value="TJ" />

    <input type="submit" value="Submit" />
</form>

Обработчик ASHX получает параметр "пользователь" в виде строки с разделителями-запятыми. Вы можете легко получить значения, разделив строку:

public void ProcessRequest(HttpContext context)
    {
        string[] users = context.Request.Form["user"].Split(',');
    }

Итак, у меня уже есть ответ на мою проблему: назначьте несколько значений одному имени параметра, предположите, что обработчик ASHX получает его как строку с разделителями-запятыми и разделяет строку. Мой вопрос заключается в том, как это обычно делается в .NET.

Какая стандартная практика для этого? Есть ли более простой способ захватить несколько значений, чем предполагать, что значение разделено запятой и вызывает на нем Split()? Является ли это тем, как массивы обычно передаются в .NET или вместо этого используется XML?

Есть ли у кого-нибудь представление о том, является ли это наилучшим подходом?

4b9b3361

Ответ 1

На самом деле нет стандарта, но то, что вы используете, ближе всего к нему.

Однако значения фактически не отправляются как строка, разделенная запятыми, они отправляются как отдельные значения с тем же именем. Данные формы из вашего примера будут выглядеть так:

user=Aaron&user=Bobby&user=Jimmy&user=Kelly&user=Simon&user=TJ

Вы можете прочитать значения как массив прямо следующим образом:

string[] users = context.Request.Form.GetValues("user");

Если вы используете Form["user"], он будет конкатенировать значения для вас, и вам придется снова их разбить. Это просто пустая трата времени, и она также ломается, если какое-либо из значений содержит запятую.

Ответ 2

Если вы используете флажки или поле списка с несколькими выборами, то набор значений, разделенных запятыми, является тем, что вы получаете автоматически из html. То, что вы делаете, прекрасно. Если вы создаете массив в javascript каким-то другим способом, вы можете создать строку с разделителями-запятыми и назначить ее скрытому полю и использовать split() на сервере одинаково. XML - это, безусловно, еще один вариант, но мне кажется сложным, если все, что вы хотите сделать, это передать простой массив чисел или коротких строк. (Конечно, если строковые значения, которые вам нужно передать, содержат запятые, это испортит ваш простой план.)