f# - 字符串不兼容

标签 f# printf

不确定我是否在这里遗漏了什么,当我尝试打印 url 时它会抛出错误。

Error string is not compatible with Printf.TextWriteFormat


type Credentials = {clientId: string; clientSecret: string}

let credentials = {clientId = ""; clientSecret = ""; deviceId = ""; deviceToken = ""}
let host = "https://example.com?grant_type=token";
let url = String.Format("%s?&client_id=%s&client_secret=%s", host, credentials.clientId, credentials.clientSecret)

printf url

let request = WebRequest.Create(url)

编辑 请求 header 接受不起作用
    let request = WebRequest.Create(url)
    request.Method <- "POST"
    request.ContentType <- "application/x-www-form-urlencoded"
    //request.Headers.Set "Accept" "application/json;charset=UTF-8"
    request.ContentLength <- (int64)data.Length


request.Accept <- "application/json;charset=UTF-8" // doesnt' work either

最佳答案

printf的第一个参数表示的类型函数期望不是 string ,这是一个 TextWriterFormat<'T>它可以从带有格式说明符的文字字符串派生出来。这个派生是一个编译器特性。

因此,您可以通过添加带有字符串格式说明符的文字字符串来解决它:

printf "%s" url

对于最后一行,您可以使用 sprintf它返回字符串,而不是打印它:
let url = sprintf "%s?&client_id=%s&client_secret=%s&device_id=%s&device_token=%s" host credentials.clientId credentials.clientSecret credentials.deviceId credentials.deviceToken

编辑

此代码有效:
open System.Net

type Credentials = {clientId: string; clientSecret: string; deviceId: string; deviceToken: string}

let credentials = {clientId = "www.stackoverflow.com"; clientSecret = ""; deviceId = ""; deviceToken = ""}
let host = "https://example.com?grant_type=token";
let url = sprintf "%s?&client_id=%s&client_secret=%s" host credentials.clientId credentials.clientSecret

printf "%s" url

let request = WebRequest.Create(url)

关于f# - 字符串不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49176483/

相关文章:

f# - 如何显式引用运算符

asp.net - F# 命名空间或模块 'XXXX' 未定义

string - 如何在 F# 中使用 String.iter

F# 在 If/Then 中推断类型

C: 为什么printf语句后字符值会改变?

.net - 获取模式匹配中可区分联合的大小写标识符

OCaml Printf.sprintf

使用 snprintf 复制数组中的字符

c - 在 C 中打印结构体的名称

c - printf - 带指针的 "unexpected"输出