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

使用Invoke-RestMethod调用Azure WebHook时Headers参数绑定失败问题

解决Invoke-WebRequest的Headers参数绑定错误问题

这个错误的核心原因很明确:Invoke-WebRequest的Headers参数需要接收哈希表(Hashtable)或字典(IDictionary)类型的对象,但你可能不小心把Headers转换成了JSON字符串——毕竟你提到在脚本末尾把内容转成了JSON,大概率是误操作把Headers也转成JSON格式了,而PowerShell没法把JSON字符串直接解析成Headers需要的键值对结构。

具体排查和修复步骤:

  • 先确认Headers的类型:你最初用Invoke-RestMethod正常时,$webhook_headers应该是类似这样的哈希表:

    $webhook_headers = @{
        "ocp-apim-subscription-key" = "your-key-here"
        # 其他需要的请求头
    }
    

    绝对不能是经过ConvertTo-Json处理后的字符串,一旦转成JSON,它就变成了纯文本,不再是PowerShell能识别的键值对集合。

  • 只对Body进行JSON转换:如果你的WebHook要求Body是JSON格式,只需要单独转换Body部分,同时记得指定Content-Type(可以直接用-ContentType参数,或者加到Headers里):

    # 保持Headers为哈希表,不要转JSON
    $webhook_headers = @{
        "ocp-apim-subscription-key" = "your-key-here"
    }
    
    # 仅转换Body为JSON字符串,-Depth参数根据你的对象层级调整
    $json_body = $Body | ConvertTo-Json -Depth 10
    
    # 正确调用Invoke-WebRequest
    Invoke-WebRequest -Uri $webhook_url -Headers $webhook_headers -Method $webhook_method -Body $json_body -ContentType "application/json"
    
  • 排查脚本末尾的操作:检查你是不是在脚本最后做了类似$webhook_headers = ConvertTo-Json $webhook_headers的操作,这会直接破坏Headers的类型。如果有,删掉这行,保持Headers的哈希表结构。

另外补充一点:Invoke-RestMethod其实会自动处理JSON Body的序列化(如果Body是对象的话),但Invoke-WebRequest更“底层”,需要你手动处理Body的格式和Content-Type头,这也是两者的一个小区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:08:36