在 aqueduct dart 中发布请求会产生 415 媒体类型不受支持

标签 post dart aqueduct

我一直在尝试处理 Aqueduct 中的帖子请求。阅读文档后,这就是我能够想到的 channel .dart

 router
.route("/chat")//"/chat/[:id]")
.link(() => ChatController());

chatController.dart

> import 'package:web_api/web_api.dart';

    class ChatController extends ResourceController{

      @Operation.get('id')
      Future<Response> getProjectById(@Bind.path("id") int id) async {
        // GET /chat/:id
        print(id);
        //return Response.ok({"key": "value"});
      }

      @Operation.post()
      Future<Response> createChat(@Bind.body() Chat chat) async {
        // POST /project

        print("post");
        final Map<String, dynamic> body = await request.body.decode();
        final name =body['name'] as String;
        print(" 1) name ==> $name");

        //return Response.ok({"key": "value"});
      }

    }
    class Chat extends Serializable{
       int id;
      String name;

      @override
      void readFromMap(Map<String, dynamic> map) {
        id = map['id'] as int;
        name = map['name'] as String;
      }

      @override
      Map<String, dynamic> asMap() {
        return {
          'id': id,
          'name': name
        };
      }
}

最后是 html 模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form action="http://127.0.0.1:8888/chat" method="POST">
        <input id="id" name="id">
        <input id="name" name="name">
        <button type="submit">Submit</button>
    </form>

</body>
</html>

aquaduct 不提供 html 模板。这是一个不同的位置。 当我提交表单时,我的控制台会记录。

[INFO] aqueduct: Server aqueduct/2 started.  
[INFO] aqueduct: POST /chat 15ms 415  

为什么我看不到正文内容,我怎样才能看到正文(表单值)

最佳答案

您收到 415 媒体类型不受支持的错误。您可以在日志中看到这一点,也可以在客户端响应中看到它。

默认情况下,ResourceController 仅接受 application/json 数据。您必须在 Controller 中设置 acceptedContentTypes 才能获取表单数据。最简单的方法是重写 ChatController 中的属性:

class ChatController {
  ...
  @override
  List<ContentType> acceptedContentTypes = [ContentType("application", "x-www-form-urlencoded")];
  ...
}

关于在 aqueduct dart 中发布请求会产生 415 媒体类型不受支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52883777/

相关文章:

java - 是否可以从 REST 请求中获取 POST 参数?

Python动态、多线程变量不起作用

flutter - 使用相机包拍照后图像未保存在移动设备上

java - Flutter 原生 android 回调

android - 我如何与 Dart 社区联系以提出建议?

dart - 如何获取 Dart Aqueduct 服务器中的请求 header

http - 适用于 Ant 的 RESTful http 客户端

php - 表单参数 : in query string and in input - any different?

dart - 如何将数据从channel.dart传递到中间件句柄方法?

macos - zsh:找不到命令:pub