我需要使用特定格式的主体执行Invoke-Webrequest,以将设备添加到产品中。以下是json中的内容(例如,直接来自供应商的文档):
$body_json = '{"datasource": [{
"parentId": "123456789000",
"name": "(name)",
"id": "(value)",
"typeId": 0,
"childEnabled": false,
"childCount": 0,
"childType": 0,
"ipAddress": "(ipAddress)",
"zoneId": 0,
"url": "(url)",
"enabled": false,
"idmId": 123456789000,
"parameters": [{
"key": "(key)",
"value": "(value)"
}]
}]}'
当我尝试以json表示提交时,我收到以下错误:
Invoke-WebRequest:无法反序列化实例 com.vendor.etc.DataSourceDetail出自START_ARRAY令牌[来源: java.io.StringReader@22c614; line:1,column:1] At C:\ powershell_script_location \ ps.ps1:114 char 9 + $ request = Invoke-WebRequest $ url -Method Post -Headers $ headers -Body $ body_json - ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest)[Invoke-WebRequest], WebException + FullyQualifiedErrorId: WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
问题在于“参数”参数的格式,因为省略“参数”时请求提交正常,但是 我正在添加的设备缺少重要的参数详细信息。
Invoke-WebRequest, JavaScriptSerializer,
是否有问题
供应商的代码,或者这是用户错误?如果需要澄清,请告诉我。
不幸的是我不知道com.vendor.etc.DataSourceDetail
实例是什么样的,因为我正在使用API而我无法直接访问它。
答案 0 :(得分:2)
使用Invoke-RestMethod
代替Invoke-WebRequest
。
如果您将身体作为字符串使用:
Invoke-RestMethod -Uri http://your-url.com -Method POST -Body $body_json -ContentType "application/json"
如果必须使用数据/参数构造主体,则可能更容易构建哈希表并通过ConvertTo-Json
将其转换为json:
$body_json = @{
datasource = @(
@{
parentId = 123456789000
name = "name"
id = "value"
typeId = 0
childEnabled = $false
childCount = 0
childType = 0
ipAddress = "ipAddress"
zoneId = 0
url = "url"
enabled = $false
idmId = 123456789000
parameters = @( @{
key = "key"
value = "value"
})
})} | ConvertTo-Json -Depth 4
Invoke-RestMethod -Method 'Post' -Uri http://your-url.com -Body $body_json -ContentType "application/json"
答案 1 :(得分:0)
身体未定义
我不明白为什么服务器上的req.body
是undefined
(NodeJS Azure函数)。原来我有一个标头,它是一个空字符串。
尚不清楚invoke-restmethod
或 azure-functions-core-tools 是否存在错误。
FWIW。