Flutter 报错“Cannot access the body fields of a Request”

Posted

技术标签:

【中文标题】Flutter 报错“Cannot access the body fields of a Request”【英文标题】:Flutter reports error "Cannot access the body fields of a Request" 【发布时间】:2020-11-16 16:07:55 【问题描述】:

错误:

无法访问没有内容类型的请求的正文字段 "应用程序/x-www-form-urlencoded"

我已尽我所能,但由于此错误,我仍然无法发出 PUT HTTP 请求。

我也试过这个:

headers: 'Content-Type': 'application/x-www-form-urlencoded',

它仍然无法工作。

代码如下:

RaisedButton(
                            padding: EdgeInsets.fromLTRB(20, 10, 20, 10),
                            color: Colors.green,
                            child: Text(
                              "Submit and Validate",
                              style: TextStyle(
                                  color: Colors.white,
                                  fontWeight: FontWeight.bold,
                                  fontSize: 12),
                            ),
                            onPressed: () async 
                              // widget.stockoid
                              var jsonbody = 
                                "oid": mainStockid,
                                "modifiedBy": userData['UserName'],
                                "modifiedOn": DateTime.now().toString(),
                                "submitted": true,
                                "submittedOn": DateTime.now().toString(),
                                "submittedBy": userData['UserName'].toString(),
                              ;
                              for (Products i in selectedProducts) 
                                print('$i.oid.toString() itemid');
                                //i.oid.toString(),
                                var stockupdate = 
                                  "oid": i.oid,
                                  "unitInStock": i.itemqty,
                                  "modifiedBy": userData['UserName'].toString(),
                                  "modifiedOn": DateTime.now().toString(),
                                ;
                                
                               //But I could print this data on the console 
                               print(
                                    '$i.oid, $i.itemqty.toString(),$userData['UserName'], 
                                $DateTime.now().toString() ploo');
                                await http
                                    .put(
                                        "http://api.ergagro.com:112/StockItem/UpdateStockItem",
                                        headers: 
                                          'Content-Type': 'application/json'
                                        ,
                                        body: jsonEncode(stockupdate))
                                  //The value returns 404 witht that error  
                                  .then((value) 
                                  print(value.statusCode);
                                );
                              
                              await http
                                  .put(
                                      'http://api.ergagro.com:112/SubmitDailyStockTaking',
                                      headers: 
                                        'Content-Type': 'application/json'
                                      ,
                                      body: jsonEncode(jsonbody))
                                  .then((value) 
                                print('$value.statusCode subb');
                              );
                              Navigator.push(
                                  context,
                                  new MaterialPageRoute(
                                      builder: (context) =>
                                          StartScanPage(widget.dcOid)));
                              //Send to API
                            ,
                            shape: RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(300),
                            ),
                          ),

【问题讨论】:

这不就是as your previous question吗? 【参考方案1】:

你应该像下面的例子一样传递 header 对象:

  // set up PUT request arguments
  String url = 'http://api.ergagro.com:112/SubmitDailyStockTaking';
  Map<String, String> headers = 
      "Content-type": "application/json"
  ;
  String json = jsonEncode(stockupdate);  
  
  // make PUT request
  Response response = await put(url, headers: headers, body: json);  
  ...

更新:

“oid”和“unitInStock”的输入参数必须是整型数据。 为了更好地理解,

更改以下代码:

var stockupdate = 
      "oid": i.oid,
      "unitInStock": i.itemqty,
      "modifiedBy": userData['UserName'].toString(),
      "modifiedOn": DateTime.now().toString(),
;

以下:

var stockupdate = 
          "oid": 123,
          "unitInStock": 2,
          "modifiedBy": "UserName",
          "modifiedOn": DateTime.now().toString(),
    ;

或基于相关数据类型的值(整数)。

【讨论】:

你好,@SanketVekariya 端点不是 SubmitDailyStockTaking 但是这个 StockItem/UpdateStockItem 我尝试了上面的例子,但它仍然没有工作先生 我可以知道代码中for循环的目的是什么吗?意思是你到底想达到什么目标? 好的,@SanketVekariya 循环将项目更新到数据库。这些项目可以是一个或多个。 原因是您的“oid”和“unitInStock”是 int 类型的数据,您必须传递与此数据类型不同的内容。我已经通过这些参数传递了这个提到的数据类型并得到响应 200。请检查数据类型! 好的 @SanketVekariya 谢谢你让我检查一下你使用整数作为两个或字符串,拜托。如果有效,我可以看看你做了什么吗?我标记你,先生?

以上是关于Flutter 报错“Cannot access the body fields of a Request”的主要内容,如果未能解决你的问题,请参考以下文章

spring编译报错:Cannot access defaults field of Properties

spring编译报错:Cannot access defaults field of Properties

IDEA报错 cannot access com.xxx的解决办法

汇编报错:Warning: Cannot insert breakpoint 1. Cannot access memory at address 0x1135 解决办法(先不打断点run一遍)(代码

idea报错Cannot access com.XXX.XXX

报错:shell-init: error retrieving current directory: getcwd: cannot access parent directories