Power Automate调用Azure Function返回BadRequest但函数实际返回200 Ok求助
根因分析
这个问题和Power Automate的HTTP连接器默认的内容解析规则直接相关,不属于编码BUG:
- 你的自定义错误返回统一为JSON格式,且携带了正确的
Content-Type: application/json响应头,所以所有错误场景下Flow都能正常解析响应 - 当Azure Function处理合法Base64、返回明文文档内容时,没有显式指定
Content-Type: text/plain响应头,HTTP连接器默认会将所有响应当成JSON格式解析,纯文本内容不符合JSON语法就会抛出无效JSON的错误 - 你删掉Base64末尾
==后请求进入错误逻辑,返回的是符合JSON格式的自定义错误,所以不会触发解析报错
解决方案
按优先级选择以下方案即可解决:
- 调整Azure Function返回200状态码的响应逻辑,显式添加
Content-Type: text/plain响应头,让HTTP连接器按照纯文本规则解析响应 - 如果你需要同时兼容JSON错误返回和纯文本成功返回,直接关闭HTTP连接器的自动解析响应开关,后续可以通过
body('HTTP动作名')直接获取原始响应内容,按需用json()或string()函数手动处理 - 如果排查后发现是请求体构造的转义问题,可以在Flow中构造请求体时,直接使用
json()函数包裹你拼接的JSON字符串,避免Base64特殊字符导致的转义异常 - 临时解决方案:发送请求前将Base64字符串做URL编码,Azure Function侧先做URL解码再处理二进制内容,避开连接器对
==字符的特殊处理逻辑
内容的提问来源于stack exchange,提问作者Martin Hatch
相关产品推荐
相关产品推荐

