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

Azure容器应用中Dapr调用POST请求体为空问题求助

解决方案建议

1. 修正Dapr服务调用的URL路径

当前的Dapr服务调用URL不符合官方HTTP API规范,这是请求体丢失的核心原因。Dapr服务调用必须使用/v1.0/invoke/<app-id>/method/<endpoint>格式的路径。

修改Expense Service中的fetch请求URL:

const resp = await fetch(`${DAPR_HOST}:${DAPR_HTTP_PORT}/v1.0/invoke/notification-service/method/test`, {
  method: "POST",
  headers: {
    "content-type": "application/json",
  },
  body: JSON.stringify(body),
});

注意:标准调用路径中无需dapr-app-id请求头,目标应用ID已通过URL路径指定。

2. 移除自定义的Fastify JSON内容解析器

你在Notification Service中自定义的JSON解析器(设置parseAs: "string"),可能与Dapr转发请求时的内容处理逻辑冲突。Fastify默认已提供完善的JSON解析能力,无需自定义。

删除以下代码块:

fastify.addContentTypeParser(
  "application/json",
  { parseAs: "string" },
  function (req, body: any, done) {
    try {
      // console.log("RAW: ", body);
      console.log("wtf");
      done(null, body);
    } catch (err: any) {
      err.statusCode = 400;
      done(err, undefined);
    }
  }
);

移除后,Fastify会自动将JSON请求体解析为JavaScript对象,你可直接从request.body获取解析后的数据。

3. 验证Azure容器应用的Dapr配置

  • 确认两个服务的Dapr Sidecar已正确启用:Azure容器应用配置中DAPR_ENABLED需设为true
  • 检查Dapr Sidecar日志,排查请求转发时是否存在请求体解析失败、长度不匹配等错误提示
  • 确保服务端口配置一致:Expense Service监听3000、Notification Service监听3001,且Azure容器应用的TARGET_PORT与服务端口对应

4. 测试调整后的代码

修改完成后重新部署到Azure容器应用,测试/expense/new接口,此时Notification Service的request.body应能正常接收JSON数据。


内容的提问来源于stack exchange,提问作者Yick Kiu Liam Leung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:33:18