Передача значений массива в HTTP-запросе в .NET - PullRequest
16 голосов
/ 06 мая 2010

Какой стандартный способ передачи и обработки массива в 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 получает параметр user в виде строки с разделителями-запятыми. Вы можете легко получить значения, разделив строку:

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

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

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

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

Ответы [ 2 ]

32 голосов
/ 06 мая 2010

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

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

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

Вы можете прочитать значения в виде массива, например, так:

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

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

2 голосов
/ 06 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...