如何配置F#JSON类型提供程序以使用UTF-8进行POST请求?

Vag*_*lov 6 encoding f# json fsharp.data.typeproviders

我需要编码为使用F#JSON类型提供程序JsonValue.Request方法发送的UTF-8 HTTP有效负载.

Request允许指定HTTP头,但JSON类型提供程序负责将Content-Type头设置为"application/json"而不指定"charset"限定符.如果我尝试自己设置内容类型,我最终会遇到重复的标头值(确实会导致错误).并且只有"application/json",以下代码选择defauls编码:

let getEncoding contentType =
    let charset = charsetRegex.Match(contentType)
    if charset.Success then
        Encoding.GetEncoding charset.Groups.[1].Value
    else
        HttpEncodings.PostDefaultEncoding
Run Code Online (Sandbox Code Playgroud)

PostDefaultEncoding是ISO-8859-1,不适用于我们的场景.

知道如何为JsonValue.Request有效载荷覆盖PostDefaultEncoding吗?

Tom*_*cek 4

我认为该JsonValue.Request方法只是一个方便的助手,涵盖了最常见的场景,但不一定为您提供发出任意请求所需的所有功能。(也就是说,UTF-8 听起来是一个更合理的默认值。)

最通用的 F# Data 函数是Http.Request,它允许您以任何方式上传数据:

let buffer = System.Text.Encoding.UTF8.GetBytes ""
Http.RequestString
  ( "https://httpbin.org/post", 
    httpMethod="POST", 
    body=HttpRequestBody.BinaryUpload buffer )
Run Code Online (Sandbox Code Playgroud)

因此,如果您替换""yourJsonValue.ToString(),则应发送带有 UTF-8 编码正文的请求。