URI Dart: несколько параметров запроса с одним и тем же ключом - PullRequest
0 голосов
/ 30 апреля 2019

Я использую API направлений Mapquest , и моя цель - создать маршрут между группой точек карты (3 и более).

Вот API-спецификация для "до"«параметр конечной точки, который используется для извлечения маршрута для заданного набора точек (соответствует назначению):

Когда формат ввода - пары ключ / значение,конечное местоположение (я) запроса маршрута.Можно указать более одного параметра.Это используется только для однострочных адресов.

См. Документацию Locations о том, как правильно формировать местоположения во всех форматах, включая JSON и XML.

AFAIK это означает, что несколькоДля запроса можно указать параметры "to", например "http://www.mapquestapi.com/directions/v2/route?from=40.65,73.95&to=40.87,-73.85&to=40.70,-73.56. Правильно ли я по этому поводу?

Итак, предполагая, что я правильно понял спецификацию, мне нужно сконструировать соответствующий URI экземпляр, который будет отправлен методу библиотеки get. Проблема в том, что он получает Map<String, String параметров запроса в конструкторе, а map означает уникальность. Как я могу сконструировать такой запрос, используяURI class?

Я попытался обойти эту проблему, просто извлекая строковое представление экземпляра URI без указания пары ключ-значение to и просто записывая сцепленные to -s в конце строки с последующей передачей в http.get. Что я пропустил, так это то, что URI заботится о экранировании символов и написании таких вещейсам по себе кажется совершенно неуместным, когда SDK уже предоставляет мне URI класс.

1 Ответ

1 голос
/ 30 апреля 2019

Я не знаю, верно ли ваше чтение, но я могу сказать, как создать URI с одним и тем же параметром запроса более одного раза.

Функция Uri.parse принимает одно и то же имя более одного раза, но вы пытаетесь создать строку, так что это бесполезно

Чтобы создать URI из необработанных данных, конструктор Uri имеет аргумент queryParameters, который принимает Map<String, dynamic>, где значение должно быть либо String, либо Iterable<String>. Итак, в вашем случае:

var request = Uri.parse("http://www.mapquestapi.com/directions/v2/route")
    .resolveUri(Uri(queryParameters: {
      "from": "40.65,73.95",  
      "to": ["40.87,-73.85", "40.70,-73.56"],
    }));

Если у вас есть часть запроса, которая содержит одно и то же имя более одного раза, вам нужно использовать специальные функции в классе Uri, чтобы считывать эти параметры запроса. Получатель по умолчанию queryParameters возвращает Map<String, String>, который может иметь каждое имя только один раз. Вместо этого вы можете использовать queryParametersAll getter.

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