使用标准库将字符串转换为 Dart 中的 GET 请求参数
Convert String to GET request Parameter in Dart using standard library
我有一个多词字符串,我想将其转换为 GET 请求参数。
我有一个接受参数 query
的 API 端点 /search
。现在通常您的请求看起来像 http://host/search?query=Hello+World
.
我有一个 String
Hello World,我想将其转换为这个 URL 编码参数。
当然,我可以编写将其分解为单词的逻辑并在其间添加一个 +
,但我想知道 URI class could help with this
我正在使用 Dart 的 httpClient
来发出请求。
Future<String> _getJsonData(String queryToSearch) async {
List data = new List();
var httpClient = new HttpClient();
var request = await httpClient.getUrl(Uri.parse(
config['API_ENDPOINT'] + '/search?query=' +
queryToSearch));
var response = await request.close();
if (response.statusCode == HttpStatus.OK) {
var jsonString = await response.transform(utf8.decoder).join();
data = json.decode(jsonString);
print(data[0]);
return data[0].toString();
} else {
return "{}";
}
}
本质上,需要将queryToSearch
编码为URL参数。
Uri class 提供了
的方法
您可以使用 Uri.http(s)
将所有内容(查询、主机和路径)包装在一起并相应地对其进行编码。
final uri = new Uri.http(config['API_ENDPOINT'], '/search', {"query": queryToSearch});
如果你有完整的URL,你可以使用Uri.parse(url_string)
。
final String accountEndPoint = 'https://api.npoint.io/2e4ef87d9ewqf01e481e';
Future<Account> getAccountData() async {
try {
final uri = Uri.parse(accountEndPoint); // <===
final response = await http.get(uri);
if (response.statusCode == 200) {
Map<String, dynamic> accountJson = jsonDecode(response.body);
return Future.value(Account.fromJson(accountJson));
} else {
throw Exception('Failed to get account');
}
} catch (e) {
return Future.error(e);
}
}
我有一个多词字符串,我想将其转换为 GET 请求参数。
我有一个接受参数 query
的 API 端点 /search
。现在通常您的请求看起来像 http://host/search?query=Hello+World
.
我有一个 String
Hello World,我想将其转换为这个 URL 编码参数。
当然,我可以编写将其分解为单词的逻辑并在其间添加一个 +
,但我想知道 URI class could help with this
我正在使用 Dart 的 httpClient
来发出请求。
Future<String> _getJsonData(String queryToSearch) async {
List data = new List();
var httpClient = new HttpClient();
var request = await httpClient.getUrl(Uri.parse(
config['API_ENDPOINT'] + '/search?query=' +
queryToSearch));
var response = await request.close();
if (response.statusCode == HttpStatus.OK) {
var jsonString = await response.transform(utf8.decoder).join();
data = json.decode(jsonString);
print(data[0]);
return data[0].toString();
} else {
return "{}";
}
}
本质上,需要将queryToSearch
编码为URL参数。
Uri class 提供了
的方法您可以使用 Uri.http(s)
将所有内容(查询、主机和路径)包装在一起并相应地对其进行编码。
final uri = new Uri.http(config['API_ENDPOINT'], '/search', {"query": queryToSearch});
如果你有完整的URL,你可以使用Uri.parse(url_string)
。
final String accountEndPoint = 'https://api.npoint.io/2e4ef87d9ewqf01e481e';
Future<Account> getAccountData() async {
try {
final uri = Uri.parse(accountEndPoint); // <===
final response = await http.get(uri);
if (response.statusCode == 200) {
Map<String, dynamic> accountJson = jsonDecode(response.body);
return Future.value(Account.fromJson(accountJson));
} else {
throw Exception('Failed to get account');
}
} catch (e) {
return Future.error(e);
}
}