我有以下邏輯在 json 物件上設定值......然后嘗試轉換為 json 字串,填充到 HTTP 請求的正文中。當我嘗試 POST 時,請求失敗,因為正文為空。但是在我嘗試分配給 Body 之前輸出 $widget 的除錯列印看起來是有效的。
代碼如下所示:
$widget = (Get-Content './testdata/notification.json') | ConvertFrom-Json
Write-Output $widget.GetType();
Write-Output $sourcedata.GetType();
$widget.requestId = $sourcedata.requestId
$widget.status = "provisioned"
$widget.workspace.id = $sourcedata.workspace.id
$widget.workspace.isReadOnly = "false"
$widget.workspace.isOnDedicatedCapacity = $sourcedata.workspace.isOnDedicatedCapacity
$widget.workspace.name = $sourcedata.workspace.name
$widget.workspace.owners = $sourcedata.workspace.owners
# Convert to Json
$widget | ConvertTo-Json -Depth 5
Write-Output $widget
$params = @{
Uri = "http://localhost:7071/workspace/notification"
Method = "POST"
Headers = @{
'Authorization' = 'Bearer ' $token
'Content-Type' = 'application/json'
}
'Body'= $widget
}
$notificationResult = Invoke-RestMethod @params
任何提示將不勝感激。
有趣的是,當我在分配所有值并轉換為 json 之后嘗試列印小部件物件的物件型別時,什么都沒有回傳。
Write-Output $widget.GetType()
回傳:
True False PSCustomObject System.Object
而不是類似的東西:
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
uj5u.com熱心網友回復:
盡管我對您的 REST api 的細節沒有太多的了解,但我認為我可以發現問題,因為我自己也經歷過很多變體。
問題 #1:ConvertTo-JSON 正在展開物件
# When you pipe to ConvertTo-JSON, you're actually saying:
# Give me a JSON object for each item in the list.
$widget | ConvertTo-Json -Depth 5
解決方案:
# Assuming there was more than one widget, this will produce a JSON array
ConvertTo-JSON -Depth 5 -InputObject $widget
# If you need to force it into a JSON array, you can always use the array subexpression:
ConvertTo-JSON -Depth 5 -InputObject @($widget)
問題 #2:Invoke-RestMethod -Body 不會自動轉換 JSON。
當您使用 -Body $widget $widget is not JSON呼叫 Invoke-RestMethod 時。Invoke-RestMethod 不會神奇地使您的主體變為 JSON,因為許多 REST api 采用 JSON 以外的格式。
解決方案:分配轉換后的值并傳遞它。
# Convert to Json
$widgetJson = ConvertTo-Json -Depth 5 -InputObject $widget
Write-Output $widget
$params = @{
Uri = "http://localhost:7071/workspace/notification"
Method = "POST"
Headers = @{
'Authorization' = 'Bearer ' $token
'Content-Type' = 'application/json'
}
'Body'= $widgetJson
}
我不知道您的物件結構中是否會有其他問題會使 REST api 抱怨,但這是您的腳本中的兩個重要問題,我能夠從您提出的癥狀中識別出來。
希望這可以幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/507985.html
標籤:电源外壳
