Private/Runtime/New-OpenApiHttpContent.ps1

function New-OpenApiHttpContent {
    <#
    .SYNOPSIS
        Creates the System.Net.Http.HttpContent for a request body according to its content type (JSON, form, multipart, text or binary).
    #>

    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Creates an in-memory object only; it changes no state.')]
    [CmdletBinding()]
    [OutputType([System.Net.Http.HttpContent])]
    param(
        [Parameter()]
        [AllowNull()]
        [object]$Body,

        [Parameter(Mandatory)]
        [string]$ContentType
    )

    $utf8 = New-Object System.Text.UTF8Encoding -ArgumentList $false
    $kind = Get-OpenApiMediaTypeKind -ContentType $ContentType
    $mediaType = [System.Net.Http.Headers.MediaTypeHeaderValue]::Parse($ContentType)

    switch ($kind) {
        'Json' {
            if ($Body -is [string]) {
                # A string is taken to be JSON text already
                $text = $Body
            }
            else {
                $text = ConvertTo-OpenApiJsonText -InputObject $Body
            }
            $content = New-Object System.Net.Http.ByteArrayContent -ArgumentList (, $utf8.GetBytes($text))
            if ([string]::IsNullOrEmpty($mediaType.CharSet)) {
                $mediaType.CharSet = 'utf-8'
            }
            $content.Headers.ContentType = $mediaType
            return $content
        }
        'Form' {
            $text = ConvertTo-OpenApiFormBody -InputObject $Body
            $content = New-Object System.Net.Http.ByteArrayContent -ArgumentList (, $utf8.GetBytes($text))
            $content.Headers.ContentType = $mediaType
            return $content
        }
        'Multipart' {
            $multipart = New-OpenApiMultipartContent -Body $Body -MediaType $mediaType
            return , $multipart
        }
        'Text' {
            $text = ConvertTo-OpenApiScalarString -Value $Body
            if ($Body -is [byte[]]) {
                $content = New-Object System.Net.Http.ByteArrayContent -ArgumentList (, $Body)
            }
            else {
                $content = New-Object System.Net.Http.ByteArrayContent -ArgumentList (, $utf8.GetBytes($text))
                if ([string]::IsNullOrEmpty($mediaType.CharSet)) {
                    $mediaType.CharSet = 'utf-8'
                }
            }
            $content.Headers.ContentType = $mediaType
            return $content
        }
        default {
            $content = New-OpenApiBinaryContent -Value $Body -KeepStreamOpen
            $content.Headers.ContentType = $mediaType
            return $content
        }
    }
}