【问题标题】:Dart URI: multiple query parameters with the same keyDart URI:具有相同键的多个查询参数
【发布时间】:2019-09-19 00:29:46
【问题描述】:

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

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

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

请参阅位置文档,了解如何正确形成所有格式的位置,包括 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】:

    我不知道你的阅读是否正确,但我可以说如何多次创建具有相同查询参数的 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。

    【讨论】:

    • 谢谢,真的很有帮助
    猜你喜欢
    • 2017-08-11
    • 2022-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    相关资源
    最近更新 更多