Преобразование синтаксиса Windows cURL в эквивалентную команду InvokeRestMethod - PullRequest
1 голос
/ 12 июня 2019

У меня проблемы с преобразованием рабочей команды cURL в Windows в эквивалентную команду PowerShell InvokeRestMethod. Похоже, я довольно близко. Я получаю ответ. Однако API, похоже, не понимает элемент вложенной хеш-таблицы "домен" , отправленный командой InvokeRestMethod. Все остальные элементы хеша, похоже, распознаются API просто отлично.

команда cURL (работает)

curl "https://api.rebrandly.com/v1/links" -X POST -H "apikey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -H "Content-Type: application/json" -d "{ \"destination\": \"http://longurl.com\", \"domain\": {\"fullName\": \"link.domain.com\"}}"

PowerShell:

$body = @{
 "destination"="longurl.com"
 "domain" = @("fullName", "link.domain.com")
} | ConvertTo-Json

$header = @{
 "apikey"="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 "Content-Type"="application/json"
}

Invoke-RestMethod -Uri "https://api.rebrandly.com/v1/links" -Method 'Post' -Body $body -Headers $header

PS: я также пытался использовать приведенный ниже синтаксис. К сожалению, я получаю тот же результат .. где элемент "хэш" игнорируется.

$body = @{
 "destination"="longurl.com"
 "domain[0]" = "fullName"
 "domain[1]" = "link.domain.com"
} | ConvertTo-Json

1 Ответ

2 голосов
/ 12 июня 2019

Когда вы используете @(...) скобки, он интерпретируется как массив, а не как хеш-таблица значения ключа, которая будет преобразована в массив [...] в JSON. Просто замените скобки во вложенном выражении на фигурные скобки @{...}, чтобы указать хеш-таблицу:

$body = @{
 "destination"="longurl.com"
 "domain" = @{"fullName" = "link.domain.com"}
} | ConvertTo-Json

Что приводит к совпадению JSON:

{
    "destination":  "longurl.com",
    "domain":  {
                   "fullName":  "link.domain.com"
               }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...