【发布时间】:2017-10-30 14:41:21
【问题描述】:
如何解决特殊字符的 JSON 响应?
当我将 Postman 工具与此 URL 一起使用时,我会收到有效且预期的 JSON。
但是,当我在 .Net 中使用此 URL 发出 HTTP 请求时,我会收到包含特殊字符的响应。
代码如下:
let url = String.Format(TagsUrl, pageNumber |> string)
let client = httpClient APIBaseAddress
let response = client.GetAsync(url) |> Async.AwaitTask
|> Async.RunSynchronously
if response.IsSuccessStatusCode
then let json = response.Content.ReadAsStringAsync() |> Async.AwaitTask |> Async.RunSynchronously
let result = JsonConvert.DeserializeObject<Response>(json)
let tags = result.items |> List.ofSeq
|> List.map (fun i -> i.name)
tags
else []
我也尝试以字节数组的形式读取响应,但结果相同:
let url = String.Format(TagsUrl, pageNumber |> string)
let client = httpClient APIBaseAddress
let response = client.GetByteArrayAsync(url) |> Async.AwaitTask
|> Async.RunSynchronously
let json = Encoding.UTF8.GetString(response);
let result = JsonConvert.DeserializeObject<Response>(json)
附录:
[<Literal>]
let TagsUrl = "2.2/tags?page={0}&order=desc&sort=popular&site=stackoverflow&filter=!-.G.68grSaJm"
[<Literal>]
let APIBaseAddress = "https://api.stackexchange.com/"
type Item = { name : string }
type Response = { items: Item list }
【问题讨论】:
-
该 URL 返回必须解压的 GZipped 内容,请参阅stackoverflow.com/questions/20990601/…
-
谢谢。您提供的链接解决了我的问题。
标签: json f# httpwebrequest dotnet-httpclient stackexchange-api