internal/functions/new-webrequest.ps1

function New-WebRequest {

    param(
        [Parameter(Mandatory = $true, Position = 1)]
        [string]$RequestUrl,
        [Parameter(Mandatory = $true, Position = 2)]
        [string]$Action,
        [Parameter(Mandatory = $false, Position = 3)]
        [string]$Payload,
        [Parameter(Mandatory = $false, Position = 4)]
        [string]$DataType,
        [Parameter(Mandatory = $false, Position = 5)]
        [string]$ContentType        
    )



    $authToken = New-AuthorizationToken
    if (Test-PSFFunctionInterrupt) {
        Stop-PSFFunction -StepsUpward 1 -Message "Stopping" 
        return
    }

    try {


        Write-PSFMessage -Message "New Request $RequestUrl, $Action, $Payload, $DataType, $ContentType " -Level Verbose
        $request = [System.Net.WebRequest]::Create($RequestUrl)
        $request.Headers["Authorization"] = $authToken
        $request.Method = $Action
    
        if ($Action -eq 'POST' -and $null -ne $Payload ) {
    
            $request.ContentType = $ContentType
            Write-PSFMessage -Level verbose  -Message "Request : $dataType"
            
            switch ($dataType) {
                "File" {
                
                    $fileStream = New-Object System.IO.FileStream($Payload, [System.IO.FileMode]::Open)
                    Write-PSFMessage -level Verbose -Message "Length $($fileStream.Length)"
                    $request.ContentLength = $fileStream.Length
                    $stream = $request.GetRequestStream()
                    $fileStream.CopyTo($stream)
                    $fileStream.Flush()
                    $fileStream.Close()
                }
                "Azure" {
                    $Payload.FetchAttributes()
                    Write-PSFMessage -level Verbose -Message "Length $($Payload.Properties.Length)"
                    $request.ContentLength = $Payload.Properties.Length
                    $stream = $request.GetRequestStream()
                    $Payload.DownloadToStream($stream)

                }
                Default {
                    Write-PSFMessage -level Verbose -Message "Length $($Payload.Length)"
                    $request.ContentLength = $Payload.Length
                    $stream = $request.GetRequestStream()
                    $streamWriter = new-object System.IO.StreamWriter($stream)
                    $streamWriter.Write([string]$Payload)
                    $streamWriter.Flush()
                    $streamWriter.Close()    
                }
            }

        }
        $request
    }
    catch {
   
        Write-PSFMessage -Level Critical -Message "Exception while creating WebRequest $RequestUrl" -Exception $_.Exception
        Stop-PSFFunction -Message "Stopping" -StepsUpward 1
    }

}