You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何设置请求头访问部署在Heroku上的Hasura GraphQL服务

错误原因分析

你收到的报错是Hasura服务端无法解析请求的JSON体导致的,和HASURA_GRAPHQL_ADMIN_SECRET配置无关:

{"errors":[{"extensions":{"path":"$","code":"invalid-json"},"message":"Error in $: not enough input"}]}


第一步:先通过Postman验证服务端可用

按以下配置发请求,先排除服务端配置问题:

  • 请求方式选POST,地址填你的完整端点my_endpoint/v1/graphql
  • Headers 配置2个必填项:
    • Content-Type: application/json
    • x-hasura-admin-secret: 你在Heroku配置的密钥值
  • Body 选择raw + 格式选JSON,填入测试查询语句:
    {"query": "query { __typename }"}
    

请求返回正常结果就说明服务端没有问题,问题出在Flutter客户端配置。


第二步:修复Flutter ferry客户端配置

你的初始化代码缺少Content-Type请求头,这是GraphQL请求的必填项,修正后的代码如下:

Client initClient(String url, String secret) {
  final link = HttpLink(
    url,
    defaultHeaders: {
      // 新增必填的Content-Type头
      'Content-Type': 'application/json',
      'x-hasura-admin-secret': secret,
    },
  );
  final cache = Cache();

  final client = Client(
    link: link,
    cache: cache,
  );
  return client;
}

如果修复后依然报错,请检查:

  • 你是否已经运行dart run build_runner build生成了ferry所需的序列化代码,未生成代码会导致请求体为空
  • 你的GraphQL查询/变更语句是否有语法错误,无效的语句会导致请求体格式异常

内容的提问来源于stack exchange,提问作者husky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 10:51:03