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

时间:2016-08-29 14:29:05

标签: json encoding f# fsharp.data.typeproviders

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

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

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吗?

1 个答案:

答案 0 :(得分:3)

我认为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编码的正文发送请求。