Dart URI:具有相同键的多个查询参数

问题描述 投票:0回答:1

我正在使用Mapquest directions API,我的目标是在一堆地图点(3和更多)之间创建一条路线。

以下是“to”参数of the endpoint that's used to fetch a route for a given set of points的API规范(它对应于目标):

当输入格式是键/值对时,路径请求的结束位置。可以提供多个参数。这仅用于单行地址。

请参阅位置文档,了解如何正确地以所有格式(包括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实例,该实例将被分派到http的库get方法。问题是它在构造函数中接收到Map<String, String的查询参数,而map表示唯一性。如何使用URI类构造这样的请求?

我试图通过检索URI实例的字符串表示而不指定to键值对,并在字符串的末尾写入连接的to-s,然后传递给http.get来尝试解决方法。我错过的是URI关注角色的逃避,当SDK已经为我提供URI类时,自己编写这样的东西似乎是完全不合适的。

rest dart uri
1个回答
1
投票

我不知道你的阅读是否正确,但我可以说如何多次创建一个具有相同查询参数的URI。

Uri.parse函数不止一次接受相同的名称,但是你试图创建字符串,所以这没用

要从原始数据创建URI,构造函数Uri有一个queryParameters参数,它接受一个Map<String, dynamic>,其值必须是单个StringIterable<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 getter返回一个Map<String, String>,每个名称只能有一次。您可以使用queryParametersAll getter代替。

© www.soinside.com 2019 - 2024. All rights reserved.