2

Wie behebe ich eine JSON-Antwort von Sonderzeichen?Wie behebe ich eine JSON-Antwort von Sonderzeichen?

Wenn ich das Postbote-Tool mit diesem URL verwende, erhalte ich gültige und erwartete JSON.

Wenn ich jedoch eine HTTP-Anfrage mit dieser URL innerhalb. NET, bekomme ich eine Antwort von Sonderzeichen.

Der Code ist der folgende:

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 [] 

I auch versucht, die Reaktion in als Byte-Array zu lesen, aber mit dem gleichen Ergebnis:

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) 

Anhang:

[<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 } 
+1

Diese URL GZipped Inhalt zurückgibt, die dekomprimiert werden müssen, finden Sie https://stackoverflow.com/questions/20990601/decompressing-gzip-stream-from-httpclient-response –

+1

Thank Sie. Dieser Link, den Sie angegeben haben, hat mein Problem gelöst. –

+3

Mögliches Duplikat von [Dekomprimieren von GZip Stream aus HTTPClient Response] (https://stackoverflow.com/questions/20990601/decompressing-gzip-stream-from-httpclient-response) –

Antwort

1

Sie können das Dienstprogramm Http von 012 verwenden. Die folgende funktioniert der Trick für mich:

Http.RequestString 
    ("https://api.stackexchange.com/2.2/tags" + 
    "?page=1&order=desc&sort=popular&site=stackoverflow&filter=!-.G.68grSaJm") 
+0

Wird dies in .NET Core unterstützt? Es kompiliert nicht ... –

+0

Ah, nein, ich fürchte, das hat noch keine .NET-Core-Version. –

Verwandte Themen