字符串不兼容

时间:2018-03-08 15:15:34

标签: f# printf

我不确定我是否在这里遗漏了某些内容,当我尝试打印网址时,它会抛出错误。

  

错误字符串与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)

修改请求标头接受无法正常工作

    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

1 个答案:

答案 0 :(得分:2)

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)