Pax8API/Private/New-Pax8RequestUri.ps1
|
function New-Pax8RequestUri { [CmdletBinding()] param ( [Parameter(Mandatory)] [pscustomobject]$Operation, [Parameter(Mandatory)] [hashtable]$Parameters ) $serverUrl = [string]$Operation.ServerUrl if ($script:Pax8Session.BaseUri) { $serverUrl = $serverUrl -replace '^https://api\.pax8\.com', ([string]$script:Pax8Session.BaseUri).TrimEnd('/') } $path = [string]$Operation.Path foreach ($parameter in @($Operation.Parameters | Where-Object In -eq 'path')) { $parameterName = [string]$parameter.ParameterName if (-not $Parameters.ContainsKey($parameterName) -or $null -eq $Parameters[$parameterName]) { throw "Missing required path parameter '$parameterName' for $($Operation.CommandName)." } $encoded = [System.Uri]::EscapeDataString([string](ConvertTo-Pax8WireValue -Value $Parameters[$parameterName])) $path = $path.Replace("{$($parameter.WireName)}", $encoded) } $queryPairs = [System.Collections.Generic.List[string]]::new() foreach ($parameter in @($Operation.Parameters | Where-Object In -eq 'query')) { $parameterName = [string]$parameter.ParameterName if (-not $Parameters.ContainsKey($parameterName) -or $null -eq $Parameters[$parameterName]) { continue } $value = ConvertTo-Pax8WireValue -Value $Parameters[$parameterName] if ($parameter.WireName -eq 'sort' -and $Parameters.ContainsKey('Direction') -and -not [string]::IsNullOrWhiteSpace([string]$Parameters.Direction) -and [string]$value -notmatch ',') { $value = "$value,$($Parameters.Direction)" } foreach ($item in @($value)) { if ($null -eq $item) { continue } $queryPairs.Add(('{0}={1}' -f [System.Uri]::EscapeDataString([string]$parameter.WireName), [System.Uri]::EscapeDataString([string]$item))) } } $uriText = "$($serverUrl.TrimEnd('/'))/$($path.TrimStart('/'))" if ($queryPairs.Count -gt 0) { $uriText = "$uriText`?$($queryPairs -join '&')" } [uri]$uriText } |