不确定我是否在这里遗漏了一些东西,当我尝试打印网址时它会抛出错误。
错误字符串与 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)
Run Code Online (Sandbox Code Playgroud)
编辑请求标头接受不起作用
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
Run Code Online (Sandbox Code Playgroud)
函数的第一个参数期望的类型printf不是 a string,而是TextWriterFormat<'T>可以从带有格式说明符的文字字符串派生的 a 。此推导是编译器功能。
因此,您可以通过添加带有字符串格式说明符的文字字符串来解决它:
printf "%s" url
Run Code Online (Sandbox Code Playgroud)
对于最后一行,您可以使用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
Run Code Online (Sandbox Code Playgroud)
编辑
这段代码的工作原理:
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)
Run Code Online (Sandbox Code Playgroud)