【问题标题】:Powershell v4 Invoke-RestMethod body sends System.ObjectPowershell v4 Invoke-RestMethod 正文发送 System.Object
【发布时间】: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


【解决方案1】:

我已经解决了这个问题,对正在拨打的网络电话进行了一些研究 PS对象:

$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
}

转成json

$JSONaddToBasket = $addToBasket |ConvertTo-Json

调用方法

Invoke-RestMethod -Uri $env:USERDOMAIN"/Api/v1/BasketActivityProducts" -Method Post -Body $JSONaddToBasket -WebSession $Wsess -ContentType "application/json"

-ContentType "application/json" 是关键部分。

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多