401 Ошибка при подключении к github API из консольного приложения С#

Всем доброго вечера.

Я немного новичок в C #, но я играю с github api, и я пытаюсь разобраться в какой-то базовой аутентификации. Я написал консольное приложение, единственная цель которого — подключиться к сайту github и открыть оттуда свой профиль. Когда я делаю вызов, который не требует аутентификации, он работает нормально.

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

Я прикрепил код ниже, и все используемые материалы присутствуют и верны.

class gitHubConnection : ConnectionManager
{
    public override string getRepositories()
    {
        string web_response = null;
        try
        {
            CredentialCache cache = new CredentialCache();
            NetworkCredential nc = new NetworkCredential("githubUsername", "githubPassword");
            cache.Add(new Uri("https://api.github.com/user"), "Basic", nc);
            WebRequest request = (HttpWebRequest)WebRequest.Create("https://api.github.com/user");

            request.Credentials = nc;
            WebResponse response = request.GetResponse();

            web_response = response.ToString();
        }
        catch (UriFormatException e)
        {
            Console.WriteLine("rats!!!!" + e.StackTrace);
        }
        catch (IOException ioe)
        {
            Console.WriteLine("something went pop " + ioe.StackTrace);
        }
        return web_response;
    }
}

Большое спасибо за ваше время, чтобы посмотреть на это. Я уверен, что я что-то забыл, но я просто не знаю, что.

валлийский мальчик


person Community    schedule 03.11.2013    source источник
comment
Если вам интересно, ваш вопрос меня заинтересовал, поэтому я попытался выяснить, почему ваш код не работает. Это побудило меня задать следующий вопрос: stackoverflow.com/q/19764113/849741   -  person Jos Vinke    schedule 04.11.2013


Ответы (1)


Это работает, если вы добавите заголовок аутентификации следующим образом:

WebRequest request = (HttpWebRequest)WebRequest.Create("https://api.github.com/user");
request.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("user:password")));

WebResponse response = request.GetResponse();
person Jos Vinke    schedule 03.11.2013
comment
Спасибо, Джос, это превосходно, большое вам спасибо :-) Это сработало отлично. - person ; 04.11.2013