HttpClient возвращает html из API - PullRequest
       5

HttpClient возвращает html из API

0 голосов
/ 05 февраля 2020

Пытается использовать HttpClient для получения ответа json от API, но продолжает получать html ответ. В браузере и в Почтальоне я получаю результат в json, просто набрав в URL. При использовании RestSharp я также получаю ответ в json. Что мне нужно добавить, чтобы получить ответ в json? Переменная responseString в строке html, а не в строке json.

Я использую. net core 3.1.

Вот код:

class Program
{
    static async Task Main(string[] args)
    {
        var response = await GetResponse();
        System.Console.ReadKey();
    }

    public static async Task<string> GetResponse()
    {
        var client = new HttpClient();
        client.BaseAddress = new Uri("https://musicbrainz.org/ws/2/");

        client.DefaultRequestHeaders.Add("Accept",
            "application/json");

        using var response = await client.GetAsync((
            "/artist/5b11f4ce-a62d-471e-81fc-a69a8278c7da?fmt=json&inc=url-rels+release-groups"));

        response.EnsureSuccessStatusCode();

        var responseString = await response.Content.ReadAsStringAsync();
        return responseString;
    }
}

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Я думаю, что API ищет User-Agent.

Попробуйте добавить

client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36")
1 голос
/ 05 февраля 2020

В качестве дополнительного примечания, вы можете рассмотреть возможность объявления вашего HttpClient как stati c. Рекомендуется в его документации . Также, если вы хотите json, вам нужно использовать DeserializeObject метод:

var result = JsonConvert.DeserializeObject<RootObject>(responseString);

Вам просто нужно убедиться, что вы уже установили Newtonsoft.Json из пакетов Nuget а также добавил следующее в ваши using директивы:

using Newtonsoft.Json;
...