VSTS (Visual Studio Team Services) 现在是Azure DevOps Services的一部分,它提供了REST API来管理团队项目、工作项、构建和发布等。要获取团队项目管理员,我们需要使用其权限相关的API。
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
static async Task Main(string[] args)
{
string organization = "your-organization-name";
string project = "your-project-name";
string pat = "your-personal-access-token";
// 获取项目级别的安全命名空间
string securityNamespaceUrl = $"https://dev.azure.com/{organization}/_apis/securitynamespaces?api-version=6.0";
string securityNamespaceId = await GetSecurityNamespaceId(securityNamespaceUrl, pat);
// 获取项目级别的权限
string permissionsUrl = $"https://dev.azure.com/{organization}/_apis/permissions/{securityNamespaceId}?api-version=6.0";
await GetProjectAdministrators(permissionsUrl, pat, project);
}
static async Task<string> GetSecurityNamespaceId(string url, string pat)
{
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes($":{pat}")));
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
JObject result = JObject.Parse(responseBody);
foreach (var ns in result["value"])
{
if (ns["name"].ToString() == "Project")
{
return ns["namespaceId"].ToString();
}
}
}
return null;
}
static async Task GetProjectAdministrators(string url, string pat, string project)
{
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes($":{pat}")));
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
JObject result = JObject.Parse(responseBody);
foreach (var permission in result["value"])
{
if (permission["displayName"].ToString() == "Project Administrators")
{
Console.WriteLine($"Project Administrators for {project}:");
foreach (var identity in permission["identities"])
{
Console.WriteLine($"- {identity["displayName"]} ({identity["descriptor"]})");
}
break;
}
}
}
}
}
问题1:认证失败
问题2:返回空结果
问题3:API版本不兼容
如果上述方法不适用,还可以通过以下方式获取管理员:
以上代码和方法应该能帮助你获取VSTS/Azure DevOps中团队项目的管理员列表。根据你的具体需求,可能需要进行一些调整。