调用Webrequest increct Json格式;无法绑定参数';标题'&引用;
我正在尝试向Azure WebHook发送一个包含两个标题和一个WebRequest的Body的Body:调用Webrequest increct Json格式;无法绑定参数';标题'&引用;,json,powershell,azure,header,Json,Powershell,Azure,Header,我正在尝试向Azure WebHook发送一个包含两个标题和一个WebRequest的Body的Body: $Body = @" { "headers": { "ocp-apim-subscription-key":"xxxxxx", "ocp-apim-trace":"true" }, "Body": { "toto": "xxxxxx-1505-xxxxx-8113-xxxxxxxxxx",
$Body = @"
{
"headers":
{
"ocp-apim-subscription-key":"xxxxxx",
"ocp-apim-trace":"true"
},
"Body":
{
"toto": "xxxxxx-1505-xxxxx-8113-xxxxxxxxxx",
"status": "Enable",
}
}"@
我正在使用:
调用RestMethod-Uri$webhook\u url-Headers$webhook\u Headers-Method$webhook\u-Method-Body$Body
一切正常,之后在Azure中,我收到以下参数输入:
workflow TestAPI
{
Param ([object]$WebHookData)
if ($WebHookData)
{
# Get Webhook data
$WebhookName = $WebHookData.WebhookName
$WebhookHeaders = $WebHookData.RequestHeader
$WebhookBody = $WebHookData.RequestBody
# Body converting
$body = (ConvertFrom-Json -InputObject $WebhookBody)
在脚本的最后,我再次将其转换为Json并使用Invoke Webrequest:
$body_json = (Convertto-Json -InputObject $body.body -Depth 10)
$header_json = (Convertto-Json -InputObject $body.headers -Depth 10 )
$response = Invoke-RestMethod -Uri $URI_key -Method $Method -Body $body_json -Headers $header_json -ContentType "application/json" -UseBasicParsing
但我得到了这个错误:
调用RestMethod:无法绑定参数“Headers”。无法转换“{
“ocp apim订阅密钥”:“XXXXXXXXXX”,
“ocp apim跟踪”:“真”
}类型值“System.String”到类型“System.Collections.IDictionary”。
这是从Json转换后PsObject中$body.headers值的输出:
@{ocp-apim-subscription-key=xxxxxxxxx; ocp-apim-trace=true}
转换为json后$header_json的输出:
{
"ocp-apim-subscription-key": "xxxxxxxxxxxxx",
"ocp-apim-trace": "true"
}
-Headers
参数需要一个IDictionary
对象,json字符串将不起作用
您必须自己创建一个IDictionary
对象,因为convertfromJSON
将把Json反序列化为PSCutomObject
您可以这样做:
$headers = @{}
($body | ConvertFrom-Json).Headers.PSObject.Properties | ForEach-Object { $headers[$_.Name] = $_.Value }
现在,您可以将$headers
变量与Invoke RestMethod
一起使用。
这将修复您收到的错误。要添加到Persistent13的Commo,您可以在PowerShell中使用如下简单功能:
$headers = @{
"Accept-Encoding" = 'gzip'
"User-Agent" = 'Outlook-Android'
}
Invoke-WebRequest http://fq.dn -Headers $headers