Pobieranie JSONa z zewnętrznego API .NET Core

0

Problem dotyczy właściwości HttpResponseMessage.Content, po wywołaniu tej metody jObject jest zawsze nullem, mimo, że response dostaje header 200 OK. Problem polega na tym, że jest to rozwiązanie, które najczęściej pojawia się w internecie i nie bardzo da się to ominąć w celu pobrania danych w formacie JSON z API. Haczyk polega na tym, co jest pokazane na screenie zamieszczonym w załączniku.
Przy debugowaniu i umieszczeniu break pointa w linijce jObject = (JObject) ... , zerknięcie w pola obiektu, który chcę przerzucić jako string wyrzuca exceptiony: , których googlowanie nie daje efektów :/

Length = '((System.Net.Http.WinHttpResponseStream)((System.Net.Http.StreamContent)response.Content)._content).Length' threw an exception of type 'System.ObjectDisposedException'

Czy ktoś z Was może zetknął się z takim problemem?

 public async Task<JObject> GetJsonFromApiAsync(Uri uri)
        {
            
            using (var client = new HttpClient())
            {
                JObject jObject = null;
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage response = await client.GetAsync(uri);
                if (response.IsSuccessStatusCode)
                {
                    jObject = (JObject) response.Content.ReadAsStringAsync().Result; //tutaj się coś sypie
                    
                }
                return jObject;
            }
        } 
0

A jakbyś ta zmienna jObject zrobil dynamiczną zamiast JObject to co ona ma w srodku?

0

Null. Tak samo jak przy jawnym typowaniu i konwersji :/ Dalej występują te same wyjątki w tym samym miejscu.

0

A że tak się zapytam, czy w ogóle zwracane dane mają ustawione w headerach application/json? Bo można wysłać dane w tym formacie, ale bez tego nagłówka.

1

Uruchomiłem ten kod i ja nigdzie nie dostaję ObjectDisposedException więc domyślam się, że to błąd w innym miejscu kodu.

Z tym kodem co wysłałeś problem jest taki, że używasz JObject(i w ogóle zamiast rzutowania powinieneś użyć metody .Parse(), która służy do konwersji ze stringa), a API zwraca tablicę i z tego co na szybko się zorientowałem powinieneś użyć JArray.

Nie wiem też dlaczego masz metodę asynchroniczną i używasz await, a na samym końcu masz blokujące wywołanie Result, ale to akurat nie jest związane z błędem.

0 użytkowników online, w tym zalogowanych: 0, gości: 0