我使用Powershell 7.3.1和Invoke-RestMethod。我需要提交一个表单到服务器,但其中一个字段需要输入JSON或请求将失败。在cURL中,这可以通过将;type=application/json
附加到字段来完成,但这似乎不适用于Invoke-RestMethod。
在cURL中,提交带有类型的表单看起来像这样:
curl --location --request POST 'http://localhost:8082/csv-as-input'
--header 'Content-Type: multipart/form-data'
--form 'file=@"C:/Users/test/task-b5cfe19-input.csv"'
--form 'json="{"name": "Test","jobType": "BATCH_FILE","runMode": "VALIDATE","config": {"branchId": "12345","trustedSource": true}}";type=application/json'
在本例中,json
表单元素被视为JSON字符串,因为末尾有;type=application/json
。
我尝试使用新的-Form
参数编写Powershell版本:
$CreateJobForm = @{
'file' = Get-Item -Path 'C:Userstesttask-b5cfe19-input.csv'
'json' = '{"name": "Test","jobType": "BATCH_FILE","runMode": "VALIDATE","config": {"branchId": "12345","trustedSource": true}};type=application/json'
}
Invoke-RestMethod -Method Post -Uri http://localhost:8082/csv-as-input -Form $CreateJobForm
cURL命令工作,但Powershell版本失败,因为它遇到了text/plain
类型。
有一种方法来键入json
字段JSON在Powershell?
您可以使用-ContentType参数指定请求体的内容类型为multipart/form-data,然后使用ConvertTo-Json cmdlet将JSON对象转换为JSON字符串并将其包含在表单数据中。
$json = @{
'name' = 'Test'
'jobType' = 'BATCH_FILE'
'runMode' = 'VALIDATE'
'config' = @{
'branchId' = '12345'
'trustedSource' = $true
}
}
$CreateJobForm = @{
'file' = Get-Item -Path 'C:Userstesttask-b5cfe19-input.csv'
'json' = (ConvertTo-Json -InputObject $json)
}
Invoke-RestMethod -Method Post -Uri http://localhost:8082/csv-as-input -ContentType 'multipart/form-data' -Form $CreateJobForm