在flutter中发帖时如何解决代码400

问题描述 投票:0回答:1

我想发布一个请求。我已经对 json 文件进行了编码,并将内容类型定义为 application/json,但仍然收到代码 400。由于我是 flutter 新手,我无法理解我在哪里犯了错误。 我想向该网址发送请求。我已经对 json 进行了编码,并定义了内容的类型。但我不知道为什么会收到错误 400 代码。代码中也给出了我想要发布请求的地址。我认为我没有犯任何语法错误。我正在关注 yt 频道以在 flutter 中发布请求。在该教程中,他们的代码运行良好。但我不知道为什么我会收到错误。

请从现在开始不要阅读文字。我只是复制粘贴使它超过220字。

我想发布一个请求。我已经对 json 文件进行了编码,并将内容类型定义为 application/json,但仍然收到代码 400。由于我是 flutter 新手,我无法理解我在哪里犯了错误。 我想向该网址发送请求。我已经对 json 进行了编码,并定义了内容的类型。但我不知道为什么会收到错误 400 代码。代码中也给出了我想要发布请求的地址。我认为我没有犯任何语法错误。我正在关注 yt 频道以在 flutter 中发布请求。在该教程中,他们的代码运行良好。但我不知道为什么我会收到错误。 我想发布一个请求。我已经对 json 文件进行了编码,并将内容类型定义为 application/json,但仍然收到代码 400。由于我是 flutter 新手,我无法理解我在哪里犯了错误。 我想向该网址发送请求。我已经对 json 进行了编码,并定义了内容的类型。但我不知道为什么会收到错误 400 代码。代码中也给出了我想要发布请求的地址。我认为我没有犯任何语法错误。我正在关注 yt 频道以在 flutter 中发布请求。在该教程中,他们的代码运行良好。但我不知道为什么我会收到错误。 我想发布一个请求。我已经对 json 文件进行了编码,并将内容类型定义为 application/json,但仍然收到代码 400。由于我是 flutter 新手,我无法理解我在哪里犯了错误。 我想向该网址发送请求。我已经对 json 进行了编码,并定义了内容的类型。但我不知道为什么会收到错误 400 代码。代码中也给出了我想要发布请求的地址。我认为我没有犯任何语法错误。我正在关注 yt 频道以在 flutter 中发布请求。在该教程中,他们的代码运行良好。但我不知道为什么我会收到错误。

以下是主要请求部分:

 Future<void> submitData () async
  {
    //get the data from the form
    final title=titleController.text;
    final description=descriptionController.text;
    final body ={
      "tilte":title,
      "description":description,
      "is_completed":false

    };
    //submit data to server
    final url='https://api.nstack.in/v1/todos';
    final uri =Uri.parse(url);
    final response =await http.post(uri,
        body: jsonEncode(body),
        headers: {"Content-Type" : "application/json"},

    );

    //is it working??
    print(response);
    print("he;;");
    if(response.statusCode==201)
      {
        print("Creation succes");
      }
    else
      {
        print("Failed");
        print(response.body);
      }


  }

从 subnitData 被调用的地方:

import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class AddTodo extends StatefulWidget {
  const AddTodo({super.key});

  @override
  State<AddTodo> createState() => _AddTodoState();
}

class _AddTodoState extends State<AddTodo> {
  TextEditingController titleController=TextEditingController();
  TextEditingController descriptionController=TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(

        title: Text("To Do"),
        centerTitle:true ,
      ),
    body: ListView(
      padding: EdgeInsets.all(20),
      children: [
        TextField(
          controller: titleController,
          decoration: InputDecoration(hintText: "Title"),
        ),
        TextField(
          controller: descriptionController,
          decoration: InputDecoration(hintText: "Description"),
          keyboardType: TextInputType.multiline,
          minLines: 5,
          maxLines: 20,
        ),
        SizedBox(height: 20),
        ElevatedButton(onPressed: submitData, child: Text("Submit")),
      ],
    ),
    );
  }
flutter dart http post 400-bad-request
1个回答
0
投票

让我给您一个使用 http 包 在 flutter 中发布请求的快速演示。这个示例将是一个非常动态的解决方案,您可以在任何需要在 flutter 中发布请求的地方使用它

STEP-1 - 假设您的端点是

static String signInEndPoint = ‘$baseUrl/signin’;

STEP-2 - 创建异常处理方法

  dynamic returnResponse(http.Response response) {
    switch (response.statusCode) {
      case 200:
        return response;
      // you can handel all your exception here
      default:
        debugPrint("Error with Connection");
    }
  }

STEP-3 - 创建 POST api 调用的方法

  Future<http.Response> postApi(String url, dynamic data) async {
    dynamic responseJson;
    final headers = {HttpHeaders.contentTypeHeader: 'application/json'};
    try {
      final response = await http
          .post(Uri.parse(url), body: json.encode(data), headers: headers)
          .timeout(const Duration(seconds: 30));
      return responseJson = returnResponse(response);
    } on SocketException {
      throw FetchDataException('No Internet Connection');
    } catch (e) {
      log('error$e');
    }
    return responseJson;
  }

第 4 步 - 最后调用您的 POST api

Future<http.Response> callSignInApi({dynamic data}) async {
    try {
      final response = await postApi(signInEndPoint, data);
      return response;
    } catch (e) {
      throw Exception(e);
    }
  }


// pass your Query parameters Map into data like this
final Map<String, dynamic> data = {
  'username_email': userName,
  'password': password,
};

await callSignInApi(data: data).
  then((Response value) async {
    if(value.statusCode == 200){
    // your model class 
    // you can convert your json to Dart from here     //https://app.quicktype.io/
    final SignInModel signInModel = SignInModel.fromJson(jsonDecode(value.body)); 
    // now you have your api response in signInModel, you can consume
    // it according to your need
    }
  }).catchError((e, StachTrace){
    debugPrint("ERROR--${e.toString()}");
  });

注意:如果您希望以干净的架构处理 flutter 中的网络请求,请遵循此link

© www.soinside.com 2019 - 2024. All rights reserved.