如何使用TypeScript通过REST API获取Azure DevOps项目中的所有用户

前端开发 2026-07-12

我正在开发一个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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章