HttpClient не возвращает JSON-значение URI - PullRequest
1 голос
/ 21 октября 2019

Я пытаюсь использовать HttpClient для получения информации от Jira, но я не вижу никакой информации. Я хочу иметь возможность получать все ошибки, которые соответствуют определенным фильтрам, чтобы я мог добавить их в таблицу в моей программе.

Я пытался получить доступ к Jira с остальными API, но каждый раз, когда я делаю этоговорит, что проблема или проект не существует. Дело в том, что если я введу URI в строку в верхней части браузера, я смогу увидеть нужный мне текст JSON. Это приводит меня к мысли, что причина, по которой мой код не возвращает эти значения, связана с проблемой авторизации. Я использую базовую авторизацию для отправки своих учетных данных. Я также хочу добавить, что я использовал cURL в cmd для проверки своих учетных данных с базовой аутентификацией, и это сработало.

public async Task<JiraModel> GetBugs()
        {
           using (var client = new HttpClient())
            {
                string url = "https://myurl.atlassian.net/rest/api/3/project/VCMF";

                String username = "username";
                String password = "apikey";
                String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("UTF-8").GetBytes(username + ":" + password));

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", "Basic " + encoded);
                client.BaseAddress = new Uri("https://myurl.atlassian.net/rest/api/3/project/VCMF");
                var response = await client.GetAsync(url);
                var content = await response.Content.ReadAsStringAsync();
                return JsonConvert.DeserializeObject<JiraModel>(content);
            }
        }

Я должен получить результаты json в виде строки к концу этой длины кода, но вместо этого я получаю ошибку 404, которая для этого кода специально говорит: «Не удалось найти проект с ключом"VCMF».

1 Ответ

1 голос
/ 21 октября 2019

Проблема в том, что вы неправильно создаете заголовок авторизации.

Конструктор, который вы используете для класса AuthenticationHeaderValue, принимает два аргумента: схему и параметр:

public AuthenticationHeaderValue(string scheme, string parameter)
{
}

Первым аргументом должна быть схема (в данном случае Basic), а вторым - учетные данные в кодировке base64:

Таким образом, вместо:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", "Basic " + encoded);

Это должно быть:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", encoded);

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...