如何将 F# JSON 类型的提供程序配置为对 POST 请求使用 UTF-8?

How to configure F# JSON type provider to use UTF-8 for POST requests?

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

请求允许指定 HTTP headers 但 JSON 类型提供程序负责将 Content-Type header 设置为 "application/json" 而无需指定 "charset" 预选赛。如果我尝试自己设置内容类型,我最终会得到重复的 header 值(确实会导致错误)。并且只有 "application/json" 以下代码选择默认编码:

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

PostDefaultEncoding 是 ISO-8859-1,不适合我们的场景。

知道如何为 JsonValue.Request 负载覆盖 PostDefaultEncoding 吗?

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

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

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

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