postFormData 静态方法

Future<HttpRequest> postFormData(
  1. String url,
  2. Map<String, String> data, {
  3. bool? withCredentials,
  4. String? responseType,
  5. Map<String, String>? requestHeaders,
  6. void onProgress(
    1. ProgressEvent e
    )?,
})

使用指定的数据以表单数据编码的方式向服务器发送 POST 请求。

这大致相当于 getString 的 POST 等价方法。此方法类似于发送 FormData 对象,具有更广泛的浏览器支持,但仅限于 String 类型的值。

如果提供了 data,则键/值对将通过 Uri.encodeQueryComponent 进行 URI 编码,并转换为 HTTP 查询字符串。

除非另行指定,此方法会附加以下头

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

以下是如何使用此方法的示例

var data = { 'firstName' : 'John', 'lastName' : 'Doe' };
HttpRequest.postFormData('/send', data).then((HttpRequest resp) {
  // Do something with the response.
});

另请参阅

实现

static Future<HttpRequest> postFormData(String url, Map<String, String> data,
    {bool? withCredentials,
    String? responseType,
    Map<String, String>? requestHeaders,
    void onProgress(ProgressEvent e)?}) {
  var parts = [];
  data.forEach((key, value) {
    parts.add('${Uri.encodeQueryComponent(key)}='
        '${Uri.encodeQueryComponent(value)}');
  });
  var formData = parts.join('&');

  if (requestHeaders == null) {
    requestHeaders = <String, String>{};
  }
  requestHeaders.putIfAbsent('Content-Type',
      () => 'application/x-www-form-urlencoded; charset=UTF-8');

  return request(url,
      method: 'POST',
      withCredentials: withCredentials,
      responseType: responseType,
      requestHeaders: requestHeaders,
      sendData: formData,
      onProgress: onProgress);
}