TFS REST API授权

时间:2019-02-12 09:01:26

标签: c# tfs azure-devops-rest-api

通过C#控制台应用程序和TFS 2015 Update 3请求TFS REST API时,获取“未经授权”状态代码。

大家好,

我正在尝试使用C#控制台应用程序控制TFS(2015更新3)REST API。

在我的旧应用程序中,我引用了Microsoft.VisualStudio.Build.Client(等)库,并且可以通过TfsTeamProjectCollection访问我需要的信息。老实说,我不知道身份验证来自哪里。可能通过Windows凭据或与Visual Studio关联的帐户。无论如何,我都不必在应用程序中指定凭据。

但是我没有找到不需要专门授权的REST API示例。

我找到了一个使用.NET客户端库的示例,该客户端库通过VssCredentials(使用NTLM)对其自身进行了授权。我也不必在此处指定用户名或oassword:

VssConnection connection = new VssConnection(new Uri(URL), new VssCredentials());

这也可行,但是我无法获得所需的所有信息,所以我想自己控制REST API。

有人可以给我发送一个示例,说明我如何在没有单独的用户名/密码的情况下访问REST API吗?还是不再可能?

谢谢 约翰内斯

using (HttpClient client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
    using (HttpResponseMessage response = await client.GetAsync("http://ServerName:8080/tfs/CollectionName/ProjectName/_apis/build/builds/BuildID"))
    {
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseBody);
    }
}

我希望得到json响应,但我只会得到Unathorized异常。

3 个答案:

答案 0 :(得分:1)

我还使用带有pat或用户名/密码的HttpClient。我已经使用默认凭据进行了测试,得到401。然后我发现了这篇文章:How to get HttpClient to pass credentials along with the request?

我已经使用WebClient创建了示例,并且可以正常工作:

WebClient wc = new WebClient();
wc.UseDefaultCredentials = true;
wc.Headers.Add("Content-Type", "application/json");

var data = wc.OpenRead("http://my-srv:8080/tfs/DefaultCollection/MyProject/_apis/build/builds/MyId?api-version=3.0");

var response = new StreamReader(data).ReadToEnd();

答案 1 :(得分:1)

您需要将HttpClientHandler()添加到您的HttpClient

using (HttpClient client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }))
{
     // ... 
}

答案 2 :(得分:1)

就像Shamrai Aleksander所说的那样,您可以使用WebClient默认凭据,或者,您可以使用TFS Security创建自定义PAT并限制用户访问权限。 请在这里找到有关TFS PAT的更多信息:https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops