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

PowerShell HTTP请求Body为空问题排查求助

问题解决建议

1. 修复POST请求Body为空的核心问题

你当前的代码仅执行了ConvertTo-Json但未将结果保存到变量,而是直接把PSCustomObject类型的$widget赋值给Body参数。Invoke-RestMethod遇到对象类型的Body时,会默认以application/x-www-form-urlencoded格式发送,而非JSON,这会导致后端无法正确解析请求体,甚至出现Body为空的情况。

修正代码如下:

# 将转换后的JSON字符串保存到变量
$jsonBody = $widget | ConvertTo-Json -Depth 5

$params = @{
    Uri    = "http://localhost:7071/workspace/notification"
    Method = "POST"
    Headers = @{
        'Authorization' = 'Bearer ' + $token
        'Content-Type' = 'application/json'
    }
    Body = $jsonBody
}

$notificationResult = Invoke-RestMethod @params

2. 处理$widget为PSCustomObject而非数组的问题

  • 先检查原JSON文件结构:如果./testdata/notification.json的根是单个对象(格式为{...}),ConvertFrom-Json会返回PSCustomObject;只有当根是数组(格式为[{...}])时,才会返回数组类型。
  • 若你需要以数组形式发送请求,但原JSON是单个对象,可手动将其包装为数组:
    $widgetArray = @($widget)
    $jsonBody = $widgetArray | ConvertTo-Json -Depth 5
    
  • 若原JSON本该是数组但读取后变成对象,检查JSON文件是否正确用[]包裹内容。

3. 额外调试技巧

  • 转换JSON后打印$jsonBody,确认生成的字符串内容完整、层级正确(-Depth 5避免默认深度不足导致嵌套内容被截断)。
  • 给Invoke-RestMethod添加-Verbose参数,查看请求的详细日志,确认请求头和请求体是否符合预期:
    $notificationResult = Invoke-RestMethod @params -Verbose
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:30:49