如何使用TypeScript通过REST API获取Azure DevOps项目中的所有用户
我正在开发一个Azure扩展。我找到了关于Azure REST API的这份文档。链接如下:this。我想知道是否有办法在一个项目中列出用户;类似这样的:
export async function getAllProjectMembers(): Promise< foo > {
const projectId = await getCurrentProjectId();
const teamMembers = await getClient(GraphRestClient).listUsers(projectId);
...
return membersInfo;
}
当然,listUsers() 实际上并不存在,遗憾的是。
我在 微软的Azure API仓库 中没有找到相关内容。
有没有办法做到这一点?也许我在仓库里漏看了什么?如果没有,我该如何在TypeScript中编写这个HTTP请求?
解决方案
基于Aleksandr的回答,我想出了可以实现所需功能的代码。从功能上看,它大致如下:
import { CommonServiceIds, IProjectPageService, getClient } from 'azure-devops-extension-api';
import { GraphRestClient, GraphUser } from "azure-devops-extension-api/Graph";
export async function getAllProjectUserData(): Promise<GraphUser[] | undefined> {
const pps = await SDK.getService<IProjectPageService>(
CommonServiceIds.ProjectPageService);
const projectId = await pps.getProject();
const projectDescriptor = await getClient(GraphRestClient).getDescriptor(projectId);
const org = await SDK.getHost().name;
let continuationToken: string | undefined = undefined;
let users: GraphUser[] = [];
const authToken = await SDK.getAccessToken();
const subjectTypes: string = "aad,imp";
do {
const url: string = `https://vssps.dev.azure.com/${org}/_apis/graph/users?`
+ `subjectTypes=${subjectTypes}`
+ (continuationToken ? `&continuationToken=${continuationToken}` : "")
+ `&scopeDescriptor=${projectDescriptor.value}`
+ `&api-version=7.1-preview.1`;
const response = await fetch(url, {
headers: {
"Authorization": `Bearer ${authToken}`,
"Accept": "application/json"
}
});
if (response.status !== 200) {
return undefined;
}
continuationToken = response.headers.get("X-MS-ContinuationToken") ?? undefined;
const json = await response.json();
users.push(...json.value);
} while (continuationToken);
if (!users || users.length === 0) {
console.warn("No users found for project ID:", projectId, "with descriptor:", projectDescriptor);
return undefined;
}
return users;
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。