Использование powershell для добавления операции с параметрами шаблона в интерфейс Azure

При попытке добавить операцию в API-интерфейс управления Azure Api с помощью команды powershell cmdlt New-AzureRmApiManagementOperationкоманда возвращает неинформативный ответ: ValidationError: One or more fields contain incorrect values,

Команда выполняется успешно, когда операция UrlTemplate не содержит параметров (то есть фрагментов URL в фигурных скобках), но не обрабатывает вызовы там, где они присутствуют.

Это работает как ожидалось:

New-AzureRmApiManagementOperation -Context $context -ApiId $aid -OperationId $oid -Name $name -Method $method -UrlTemplate '/all'

Но это не так:

New-AzureRmApiManagementOperation -Context $context -ApiId $aid -OperationId $oid -Name $name -Method $method -UrlTemplate '/{id}'

1 ответ

Решение

Представляется, что информация, представленная в документации, несколько неточна. TemplateParameters не является обязательным, когда параметры присутствуют, и очень не генерируется автоматически.

Массив объектов типа Microsoft.Azure.Commands.ApiManagement.ServiceManagement.Models.PsApiManagementParameter должен присутствовать, и для каждого параметра в шаблоне URL он должен содержать элемент с Name с тем же значением, что и значение параметров, и Type будучи членом некоторого перечисления, предположительно совпадающего с некоторыми определениями чванства.

Следующий код генерирует такой массив из строки шаблона:

$tparam = Select-String "{([^}]+)}" -input $template -AllMatches |
    Foreach { $_.matches } |
    Foreach {
        $p = New-Object -TypeName Microsoft.Azure.Commands.ApiManagement.ServiceManagement.Models.PsApiManagementParameter
        $p.Name = $_.Groups[1].Value
        $p.Type = "string"
        return $p
    }

Это может сопровождаться:

New-AzureRmApiManagementOperation -Context $context -ApiId $aid -OperationId $oid -Name $name -Method $method -UrlTemplate $template -TemplateParameters $tparam
Другие вопросы по тегам