如何将 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 编码正文的请求。
我需要将使用 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 编码正文的请求。