Как передать массив в get запросе
Перейти к содержимому

Как передать массив в get запросе

Как закалялся код.

Обычно в GET запросах .NET Web API используются простые параметры запроса типа int id, string filter, string query и т.д. При использовании простых типов привязка параметров для GET запросов происходит без проблем. Если вам понадобится выполнить запрос к вашему приложению Web API передав в качестве параметра GET массив значений или полноценный объект (и на серверной вы хотите получить сразу объект), то потребуется использование специального биндера.

Допустим есть javascript get запрос на стороне клиента, где параметром передается массив значений типа integer:

Этот код формирует такой запрос:

Если просто прописать нужные типы данных в действие контроллера (массив):

То на стороне сервера вы получите ids = null;

Принцип работы Web API

Web API по умолчанию использует такие правила для привязки параметров:

  • Для простых типов данных, Web API пытается получить значение из URI. Простые типы — это .NET примитивные типы (int, bool, double и так далее), а также TimeSpan, DateTime, Guid, и любые типы имеющие реализацию преобразования из строки.
  • Сложные типы данных, в том числе коллекции простых типов Web API пытается прочитать из тела сообщения. (что не актуально для GET запроса)

Настройка привязки сложных типов в GET запросе


Но все же в .net есть реализация привязки из URI. Для этого к требуемому параметру со сложным типом данных нужно подставить атрибут [FromUri] или [ModelBinder]:

Передача массивов в $_GET и $_POST запросах

Очень, очень часто мы можем наблюдать безумные штуковины следующего вида:

  1. Параметры вида:view_type, show_descript
  2. Параметры фильтра + сортировка:sort, brand, color, images_only, price_from
  3. Пагинация:page

​И вот как все это приходит:

Согласитесь, это не удобно!?

Теперь необходимо руками разбивать этот набор по группам, либо пребегать к различным "костыльным" методам. (Разумеется можно сделать это красиво и удобно, но это "плохой тон" имхо).

Разумный вариант:

2) $_POST-массив на примере формы

Почему в качестве примера я выбрал именно формы?

Часто, по крайней мере мне, выпадает необходимость предоставить пользователю возможность динамической генерации однотипных элементов интерфейса, например это могут быть input'ы для загрузки изображений, количество которых заранее не известно.

Со стороны недостаточно опытных веб-разработчиков привычным образом многие делают следующее:

В лучшем случае:

В худшем:

А идеальный вариант находится так близко:

Такой "идеальный" относительно двух предыдущих вариантов дает возможность очень удобно и легко добавлять в DOM любое количество input'ов.

3) Некоторые особенности

Так же очень удобно формировать двумерные и более-мерные массивы следующим образом:

как передать массив через $_GET ?

как передать массив через $_GET ? можно ли ? если да почему этот вариант не работает ?

$info = array(«user» => $username, «email» => $email, «pass» => $pwd);

в add_device_form.php рапечатываю $errors_holder;

Ссылка на комментарий
Поделиться на других сайтах

11 ответов на этот вопрос

  • Сортировать по голосам
  • Сортировать по дате

Рекомендованные сообщения

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *