PowerQuery调用MongoDB API返回Bad Request但Postman正常
问题原因与解决方案
你的PowerQuery请求返回Bad Request的核心原因是请求体格式与Content-Type声明不匹配:
- 你在headers里指定了
Content-Type="application/json",但实际用Uri.BuildQueryString(body)生成的是URL编码的表单格式(比如dataSource=MyCluster&database=sample_airbnb...),而非MongoDB Data API要求的JSON格式。 - Postman中你应该是直接发送了JSON格式的请求体,所以能正常工作。
修正后的PowerQuery代码
let url = "https://eu-central-1.aws.data.mongodb-api.com/app/data-datwc/endpoint/data/v1/action/find", headers = [#"Content-Type"="application/json", #"api-key"="{{MYAPIKEY}}"], body = [ dataSource= "MyCluster", database= "sample_airbnb", collection= "listingsAndReviews" ], // 将记录转为JSON格式的二进制内容,匹配Content-Type声明 jsonBody = Text.ToBinary(Json.FromValue(body)), response = Json.Document(Web.Contents(url, [ Headers = headers, Content = jsonBody ])) in response
关键修正点
- 用
Json.FromValue(body)把PowerQuery的记录类型转换为标准JSON字符串,再通过Text.ToBinary转为二进制请求体,确保与application/json的Content-Type一致。 - 保留
api-key和其他请求头的正确设置,确保权限验证通过。
额外检查项
- 确认
{{MYAPIKEY}}已替换为你的实际MongoDB API密钥,没有保留占位符。 - 确保MongoDB Data API的权限配置允许该API密钥访问指定的集群、数据库和集合。
- 若仍有问题,可在PowerQuery中启用抓包工具对比Postman和PowerQuery的请求内容,确认所有参数(包括请求头、请求体)完全一致。
内容的提问来源于stack exchange,提问作者Dav
相关产品推荐
相关产品推荐

