通过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异常。
答案 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