【发布时间】:2014-11-14 09:38:15
【问题描述】:
我遇到的这个问题是 Invoke-RestMethod 似乎无法处理数组中的数组。我有下面设置的变量 $addToBasket。
$addToBasket = @{
LocationId= 1
ItemReference= (
"A-TTA-G",
"A-TTA-B+"
)
StartDateTime= (
"2014-11-19T09:00:00",
"2014-11-19T09:00:00"
)
Quantity= (
1,
1
)
BasketReferenceGuid= $basketRef
}
如果你在 PS 中查看这个变量,它看起来如下: PS H:> $addToBasket
Name Value
---- -----
Quantity {1, 1}
ItemReference {A-TTA-G, A-TTA-B+}
StartDateTime {2014-11-19T09:00:00, 2014-11-19T09:00:00}
BasketReferenceGuid 0ca311a5-4c8d-4a03-9149-cfd174b27c17
LocationId 1
现在我运行 rest 方法并使用 fiddler 来捕获结果
加入购物篮
$addedForm = Invoke-RestMethod -Uri $env:USERDOMAIN"/Api/v1/BasketActivityProducts" -Method Post -Body $addToBasket -WebSession $Wsess
PS Response :
Invoke-RestMethod : {"Code":15,"Message":"The value 'System.Object[]' is not valid for DateTime.\nThe value 'System.Object[]' is not valid for Int32.\n","ResourceType":"ErrorObject"}
提琴手日志显示正在发送以下请求
Quantity=System.Object%5b%5d
&ItemReference=System.Object%5b%5d
&StartDateTime=System.Object%5b%5d
&BasketReferenceGuid=2377472a-93b7-44ac-a6d9-690d732e85c2
&LocationId=1
有谁知道如何绕过 PS 将数组作为 (System.Object) 发送?
【问题讨论】:
-
它们应该是什么样子?我假设为字符串数组?另外,为了清楚您在数组中没有数组,您在哈希中有数组 (
@{}) -
我猜您的 API 正在接受 JSON 或 XML 作为您的 -Body 参数,不是吗?您不会在某个地方错过 ConvertTo-JSON 或 ConvertTo-XML 吗?
-
感谢两位的回复。我已经确定了我遇到问题的原因,这是因为我没有在我的请求中添加 -ContentType "application/json"。 REST 应用程序期待 Json / xml 请求。他们工作的原因是因为到目前为止我只使用 POST 请求。我会用我的分辨率更新问题:)
标签: arrays json powershell