繁体   English   中英

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

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

我需要编码为使用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

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

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

我认为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 )

因此,如果用yourJsonValue.ToString()替换"👍👍👍" ,则应该使用UTF-8编码的主体发送请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM