Как авторизовать HttpClient для TFS - PullRequest
0 голосов
/ 05 июня 2018

Я получил этот вывод при попытке доступа к коммитам в TFS: URI работает в моем браузере, но аутентификация не работает для моего httpClient.Мое имя пользователя - домен \ пользователь, и сейчас я использую только часть имени пользователя, но я пробовал его с доменом и без него.Пожалуйста, помогите!

System.Net.Http.HttpRequestException: Код состояния ответа не указывает на успешность: 401 (неавторизовано).в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в System.Runtime.CompilerServices *TaskA 100. * 1006) .1.*

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Просто попробуйте заменить var byteArray = Encoding.ASCII.GetBytes("username:password"); на следующий формат (он работает на моей стороне):

var byteArray = Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "domain\\username", "pasword"));

Пример здесь:

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace GetCommits
{
    class Program
    {
        public static void Main()
        {
            Task t = GetCommits();
            Task.WaitAll(new Task[] { t });
        }
        private static async Task GetCommits()
        {
            try
            {
                var httpClient = new HttpClient();

                var byteArray = Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "domain\\username", "password"));

                httpClient.DefaultRequestHeaders.Authorization
                                    = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));


                var response = await httpClient.GetStringAsync("http://ictfs2015:8080/tfs/DefaultCollection/Git-Scrum/_apis/git/repositories/389e8215-1fb2-4fdc-bd04-ebc8a8a4410e/commits/a395accfe2f1ed60ee404d6515fc9f55631cbe42");
                Console.WriteLine(response);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}
0 голосов
/ 05 июня 2018

Если вы используете проверку подлинности Windows и уже вошли в систему с правильной учетной записью, вам не нужно указывать заголовок проверки подлинности.

Вместо var httpClient = new HttpClient(); напишите

var httpClient = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });

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