Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用Webrequest increct Json格式;无法绑定参数';标题'&引用;_Json_Powershell_Azure_Header - Fatal编程技术网

调用Webrequest increct Json格式;无法绑定参数';标题'&引用;

调用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",

我正在尝试向Azure WebHook发送一个包含两个标题和一个WebRequest的Body的Body:

$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