Powershell Invoke-RestMethod设置表单字段数据类型,如cURL



我使用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

最新更新