【问题标题】:How to post int/integer value as json from dart/flutter如何从 dart/flutter 将 int/integer 值作为 json 发布
【发布时间】:2020-01-30 16:09:19
【问题描述】:

我使用 asp.net core web API 作为后端。有一种方法可以接受单个整数值。

Method([FromBody] int value)

我想从 dart/flutter 发布整数值。 我使用 dart http 包尝试了以下操作。

Http.post(url, body:0,headers:{"content-type":"application/json"}

Http.post(url, body:{0},headers:{"content-type":"application/json"}

Http.post(url, body:convert.jsonEncode(0),headers:{"content-type":"application/json"}

Http.post(url, body:convert.jsonEncode({0}),headers:{"content-type":"application/json"}

我以上所有尝试都因错误而失败 “无效参数:无效请求正文“0””

【问题讨论】:

  • @dhaval-solanki 感谢您格式化文本。我从手机上发布了这个问题。
  • 好的,没问题,我们在这里为社区提供帮助和指导。

标签: android json flutter dart


【解决方案1】:

请参考我的代码

  1. 导入

    import 'package:http/http.dart' as http;
    
  2. http 请求

    var client = new http.Client();
    client.post(Uri.encodeFull("Your url"), body: {
      "param1": "value1",
      "param2": 11, // integer value type       
    }).then((response) {
      client.close();
      if (this.mounted && response.statusCode == 200) {
         //enter your code for change state
      }
    }).catchError((onError) {
       client.close();
       print("Error: $onError");
    });
    

希望对你有帮助。

PS:

var client = new http.Client();
var response = await client.post(Uri.encodeFull("Your Url"), body : "0", header : {/*Your headers*/"});

【讨论】:

  • 感谢您的帮助,但我只能发送整数值,而不是参数名称。就像身体只有0一样。当我使用 PostMan 发布时它正在工作
  • 你能分享你的邮递员请求吗?或者试试这个。 => 正文:{“”:1}
  • 是的,我尝试过 ("":1) 但无法正常工作。在 Postman 请求中,我只传递了 0 并选择了 json 类型,并且效果很好。
  • 请分享您的邮递员屏幕。不需要网址。只需要标题和正文屏幕。
【解决方案2】:

你可以试试这个代码。

Http.post(url, body:{"id": "0"},headers:{"content-type":"application/json"}

【讨论】:

  • 感谢您的帮助,但我只能发送整数值,而不是参数名称。就像身体只有0一样。当我使用 PostMan 发布时它正在工作
【解决方案3】:

在尝试将 HTTP 请求发送到具有整数作为其参数(年龄)之一的 API 时,我遇到了同样的问题。 Dart 希望我将 int 转换为字符串,而 API 不接受 int 作为字符串。因此,我遇到了同样的错误并最终出现了这个问题。

我的解决方案是将输入存储在地图中,添加标头 {"content-type":"application/json"} 并将地图传递到正文争论中。

import 'dart:convert';
import 'package:http/http.dart' as http;


Future<String> register_user() async {
  var req_body = new Map();

  req_body['username'] = 'John Doe';
  req_body['age'] = 20; /* The integer */

  final response = await http.post(
        'http://127.0.0.1:8081/user/register',
         headers: {'Content-Type': 'application/json'},
         body: jsonEncode(req_body));


  if (response.statusCode == 200) {
    var object = json.decode(response.body);

    return object.toString();
  } else if (response.statusCode == 422) {
    return 'Error';
  } else {
    return 'Can not connect to server';
  }
}

【讨论】:

    【解决方案4】:

    你可以试试下面的一个

    var queryParameters = {
                    'value': '0'
            };
            var uri =
                    Uri.https('www.myurl.com', '/api/sub_api_part/', queryParameters); //replace between  part and your url
            var response = await http.get(uri, headers: {
                        HttpHeaders.contentTypeHeader: 'application/json'
            });
    

    【讨论】:

    • 感谢您的帮助。请注意,我正在做 POST 而不是 GET,而且我必须只发送整数值,而不是参数名称。就像身体只有0一样。当我使用 PostMan 发布时它正在工作
    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 2023-03-18
    • 2022-01-08
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多