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
相关产品推荐
相关产品推荐

