Powershell Invoke-Webrequest w/ JSON Body - 无法反序列化...?

2024-02-29

我需要使用特定格式的正文执行 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;行:1,列:1] 在 C:\powershell_script_location\ps.ps1:114 字符 9 + $request = Invoke-WebRequest $url -Method Post -Headers $headers -Body $body_json - ... +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 类别信息:无效操作: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException + FullQualifiedErrorId : WebCmdletWebResponseException、Microsoft.PowerShell.Commands.InvokeWebRequestCommand

问题在于“参数”的格式,参数,因为省略“参数”时请求提交正常,但随后 我添加的设备缺少重要的参数详细信息。

有什么问题吗Invoke-WebRequest, JavaScriptSerializer,供应商的代码,还是用户错误?如果需要任何说明,请告诉我。

不幸的是我不知道什么是com.vendor.etc.DataSourceDetail实例看起来像,因为我正在使用 API 并且我无法直接访问它。


Use Invoke-RestMethod代替Invoke-WebRequest.

如果您将主体作为字符串使用:

Invoke-RestMethod -Uri http://your-url.com -Method POST -Body $body_json -ContentType "application/json"   

如果正文必须由数据/参数构建,则构建哈希表并将其转换为 json 可能会更容易ConvertTo-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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Powershell Invoke-Webrequest w/ JSON Body - 无法反序列化...? 的相关文章

随机推荐