我需要编码为使用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吗?
答案 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编码的正文发送请求。