IAm*_*aja 11 url map type-conversion query-string dart
我有一种情况,我需要将一个Map变成一个查询字符串(在第一个之后?).例如,如果我有以下地图:
Map json = {
"email": eml,
"password": passwd
};
Run Code Online (Sandbox Code Playgroud)
一个基本网址:
String baseURL = "http://localhost:8080/myapp";
Run Code Online (Sandbox Code Playgroud)
然后我需要一些东西将json Map转换为基本URL的查询字符串:
String fullURL = parameterizeURL(baseURL, json);
// Prints: http://localhost:8080/myapp?email=blah&password=meh
// (if "blah" was entered as the email, and "meh" was entered as the password)
print(fullURL);
Run Code Online (Sandbox Code Playgroud)
我在Git上找到了这个查询String-to-map库,但我需要反过来!在那里获取URL编码也很棒.
我很高兴自己做一些本土的东西,但对Dart这么新,我想知道是否有任何关于pub/ Github/etherspehere已经做到了这一点.
use*_*314 17
你看过dart中的Uri课:核心吗?您可以从Url组件构造一个Uri类:
new Uri({String scheme, String userInfo: "", String host: "", port: 0, String path,
Iterable<String> pathSegments, String query,
Map<String, String> queryParameters, fragment: ""}) #
Run Code Online (Sandbox Code Playgroud)
请注意,您将查询字符串作为映射传递,如果您使用的是不接受此类的HTTP客户端,则可以将其截取以获取Url.
我在我的代码中使用它而不是字符串Url
以上使用您的数据为例:
void main() {
String eml = "me@here.com";
String passwd = "password";
Map json = {
"email": eml,
"password": passwd
};
Uri outgoingUri = new Uri(scheme: 'http',
host: 'localhost',
port: 8080,
path: 'myapp',
queryParameters:json);
print(outgoingUri);
}
Run Code Online (Sandbox Code Playgroud)
这打印:
http://localhost:8080/myapp?email=me%40here.com&password=password
Run Code Online (Sandbox Code Playgroud)
请注意,一旦构造了Uri是不可变的,即您无法再次更改查询参数.虽然我还没有使用它,但在酒吧里也有这个包可以提供更多的设施.
Ale*_*kov 14
TL; 博士
String queryString = Uri(queryParameters: {'x': '1', 'y': '2'}).query;
print(queryString); // x=1&y=2
Run Code Online (Sandbox Code Playgroud)
小智 7
final yourMap = {'x': '1', 'y': '2'};
final queryString = yourMap.toMap().entries.map((e) => '${e.key}=${e.value}').join('&');
print(queryString); // x=1&y=2
Run Code Online (Sandbox Code Playgroud)
你能描述一下你的用法吗?首先,在 GET 请求中保留密码等数据并不是一个好的做法。如果是 POST 请求,效果会更好。也就是说,如果您确实想使用它作为 POST 请求将地图发送到服务器,请查看:HttpRequest.postFormData它会自动将您提供的地图作为 POST 数据添加到服务器。需要记住的一个警告是数据必须是 Map (或者键和值必须是字符串)。用法示例:
import 'dart:html';
// ...
// Somewhere in your login related method
HttpRequest.postFormData('login.php', data).then((HttpRequest req) {
if(req.status != 200) {
print(req.statusText);
}
});
Run Code Online (Sandbox Code Playgroud)
有一个可用于服务器端 Dart 的包,它允许您轻松地手动处理各种 HTTP 请求,恰当地命名为http。但是,这不适用于客户端脚本。我不知道任何现有的软件包可以提供您正在寻找的功能。
在这一点上,如果您确实决定推出自己的产品,也许可以向您在问题中提到的 QueryString 项目提供拉取请求,以便其他人可以在一个简单的包中使用该功能。
| 归档时间: |
|
| 查看次数: |
2209 次 |
| 最近记录: |