Подключайтесь к TFS программно с 2017 года - PullRequest
0 голосов
/ 17 января 2019

Я использую TFS 15.x. package.

Ошибка:

Microsoft.TeamFoundation.TeamFoundationServerUnauthorizedException: 'TF30063: Вы не авторизованы для доступа «https://myproject.visualstudio.com/RpaCodeReview'

Uri Repurl = new Uri("https://myproject.visualstudio.com/RpaCodeReview");
NetworkCredential netCred = new NetworkCredential(username, password);
VssBasicCredential basicCred = new VssBasicCredential(netCred);
VssCredentials tfsCred = new VssCredentials(basicCred);
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(Repurl, tfsCred);
tpc.EnsureAuthenticated();

Я пробовал разные решения. Но не смог найти правильного решения.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вместе со всеми комментариями к учетным данным я обнаружил, что базовая аутентификация заблокирована в некоторых репозиториях.

Я считаю, что лучше всего создать Личный токен доступа (PAT) в хранилище. Затем используйте это в своих соединениях для доступа к API.

Пример, чтобы прочитать, какие проекты находятся в коллекции репозитория tfs / devops по умолчанию:

string PAT = "Put PAT String Here";
string RepoStore = "https://url of repo here";
string responseBody = "";

using (HttpClient client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(
        new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
        Convert.ToBase64String(
            System.Text.ASCIIEncoding.ASCII.GetBytes(
                string.Format("{0}:{1}", "", PAT))));

    using (HttpResponseMessage response = client.GetAsync(
                RepoStore + "/_apis/projects").Result)
    {
        response.EnsureSuccessStatusCode();
        responseBody = await response.Content.ReadAsStringAsync();
    }
    Console.WriteLine(responseBody);
}

Console.ReadKey();
0 голосов
/ 17 января 2019

Это зависит от версии вашего TFS. Однако, если вы пытаетесь подключиться к TFS2015 или TFS2017, это подойдет;

using Microsoft.TeamFoundation.Client;
using Microsoft.VisualStudio.Services.Common;
using System;
using System.Net;   

namespace TFSConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            NetworkCredential networkCredentials = new NetworkCredential(@"Domain\Account", @"Password");
            Microsoft.VisualStudio.Services.Common.WindowsCredential windowsCredentials = new Microsoft.VisualStudio.Services.Common.WindowsCredential(networkCredentials);
            VssCredentials basicCredentials = new VssCredentials(windowsCredentials);
            TfsTeamProjectCollection tfsColl = new TfsTeamProjectCollection(
                new Uri("http://XXX:8080/tfs/DefaultCollection"),
                basicCredentials);

            tfsColl.Authenticate(); // make sure it is authenticate
        }
    }
}

Я не могу подчеркнуть достаточно, чтобы гарантировать, что полномочия в порядке! Эта ошибка встречалась и у меня пару раз.

Существует и другое решение, если вышеперечисленное не работает.

  1. Закройте Visual Studio и перейдите в Панель управления
  2. Учетные записи пользователей -> Управление учетными данными (в левом столбце)
  3. Выберите «Учетные данные Windows»
  4. Прокрутите вниз до раздела «Общие учетные данные» и найдите подключение к вашему TFS серверу
  5. Разверните раскрывающийся список и нажмите «Изменить»
  6. Введите в своей сети пароль
  7. Перезапустите Visual Studio и повторите код
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...