使用PowerShell调用Redmine REST API创建工单时出现422错误求助
解决PowerShell调用Redmine REST API创建工单时的422错误
问题原因
你脚本里的请求Body使用了"转义字符,并且用单引号包裹字符串。PowerShell中单引号字符串不会解析转义字符,导致发送给Redmine的JSON内容里实际包含"而非正常的双引号,Redmine无法识别这种格式错误的JSON,因此返回422 Unprocessable Entity错误。而Postman会自动处理转义逻辑,所以请求可以正常执行。
解决方案
方法1:使用PowerShell对象转换为JSON(推荐)
先构造PowerShell哈希表对象,再通过ConvertTo-Json命令生成标准JSON字符串,彻底避免手动编写JSON的转义错误:
$Headers = @{ 'X-Redmine-API-key' = '********' } $Uri = "https://task.test.com/issues.json" # 构造工单数据对象 $issueData = @{ issue = @{ project_id = 316 subject = "testProject" priority_id = 4 description = "testTask" assigned_to_id = 1891 custom_fields = @( @{ value = "******" name = "physicalName" id = 5 }, @{ value = "****" name = "***" id = 6 }, @{ value = "****" name = "*****" id = 10 }, @{ value = "****" name = "*****" id = 11 }, @{ value = "0" name = "*******" id = 16 } ) } } # 转换为JSON字符串(-Depth参数确保嵌套结构被正确序列化) $jsonBody = $issueData | ConvertTo-Json -Depth 3 # 发送请求 Invoke-RestMethod $Uri -Headers $Headers -Method POST -ContentType 'application/json' -Body $jsonBody
方法2:修正手动编写的JSON字符串
如果坚持手动编写JSON,需将"替换为实际双引号,并使用PowerShell的Here-String包裹内容(无需手动转义双引号):
$Headers = @{ 'X-Redmine-API-key' = '********' } $Uri = "https://task.test.com/issues.json" Invoke-RestMethod $Uri -Headers $Headers -Method POST -ContentType 'application/json' -Body @" { "issue": { "project_id": 316, "subject": "testProject", "priority_id": 4, "description": "testTask", "assigned_to_id": 1891, "custom_fields": [{ "value": "******", "name": "physicalName", "id": 5 }, { "value": "****", "name": "***", "id": 6 }, { "value": "****", "name": "*****", "id": 10 }, { "value": "****", "name": "*****", "id": 11 }, { "value": "0", "name": "*******", "id": 16 } ] } } "@
内容的提问来源于stack exchange,提问作者Pomidor_83
相关产品推荐
相关产品推荐

