使用REST API获取Azure DevOps中的所有组织

时间:2019-02-19 09:04:55

标签: rest azure azure-devops azure-devops-rest-api

我正在尝试检索帐户中的所有组织,但是在文档中,API调用中始终需要一个组织。

https://dev.azure.com/{organization}/_apis/...

5 个答案:

答案 0 :(得分:2)

如果您加载当前登录页面,它将显示与您的帐户相关联的所有组织。我认为它必须以某种方式获取该信息。我捕获了网络流量,并相信您可以使用系统API调用获得所需的数据。但是,它可能会更改或可能不受支持,恕不另行通知,因此请自行决定使用。

您可以使用此API获取所需的信息:

Post https://dev.azure.com/{organization1}/_apis/Contribution/HierarchyQuery?api-version=5.0-preview.1

身体

{
    "contributionIds": ["ms.vss-features.my-organizations-data-provider"],
    "dataProviderContext":
        {
            "properties":{}
        }
}

回复:

{
    "dataProviderSharedData": {},
    "dataProviders": {
        "ms.vss-web.component-data": {},
        "ms.vss-web.shared-data": null,
        "ms.vss-features.my-organizations-data-provider": {
            "organizations": [
                {
                    "id": "{redacted id}",
                    "name": "{organization1}",
                    "url": "https://{organization1}.visualstudio.com/"
                },
                {
                    "id": "{redacted id}",
                    "name": "{organization2}",
                    "url": "https://dev.azure.com/{organization2}/"
                }
            ],
            "createNewOrgUrl": "https://app.vsaex.visualstudio.com/go/signup?account=true"
        }
    } }

答案 1 :(得分:1)

REST API请求/响应对可以分为五个部分:

请求URI,格式如下:

VERB https://{instance}[/{team-project}]/_apis[/{area}]/{resource}?api-version={version}

实例: 您要将请求发送到的Azure DevOps Services组织或TFS服务器。

它们的结构如下: Azure DevOps服务:dev.azure.com/{organization}

REST API是特定于组织的。目前尚无记录。您可以在此处提交功能请求:https://developercommunity.visualstudio.com/spaces/21/index.html

我们的项目经理和产品团队将审阅您的建议。抱歉给您带来不便。

作为一种解决方法,您可以使用从网络流量中捕获的API,就像 Matt 所述。

答案 2 :(得分:1)

我们一直在使用“ https://app.vssps.visualstudio.com/_apis/accounts”而未指定任何API版本,这会返回我们的所有帐户名

这仍然对我们有效,但是由于其他一些问题,我们将api版本添加到所有api调用中。为此,我还遇到https://docs.microsoft.com/en-us/rest/api/azure/devops/account/accounts/list?view=azure-devops-rest-5.0需要成员或所有者标识的事实。

检索需要一个帐户/组织,因此有点麻烦22。

现在我只留下“ https://app.vssps.visualstudio.com/_apis/accounts

答案 3 :(得分:1)

您只需拨打电话即可获得您作为其会员/所有者的所有帐户,就可以做到这一点。但是为此,您需要您的ID,可以通过调用get个人资料轻松获取该ID。以下是步骤:

  1. 使用Bearer令牌或PAT进行VSTS API调用以获取个人资料详细信息

https://app.vssps.visualstudio.com/_apis/profile/profiles/me?api-version=5.1

这将返回您的ID:

redux-persist
  1. 接下来,打电话给您成为其成员或所有者的所有帐户:

https://app.vssps.visualstudio.com/_apis/accounts?api-version=5.1&memberId={{Your ID}}

响应:

{
    "displayName": "xxxx",
    "publicAlias": "xxx",
    "emailAddress": "xxx",
    "coreRevision": xxx,
    "timeStamp": "2019-06-17T09:29:11.1917804+00:00",
    "id": "{{We need this}}",
    "revision": 298459751
}

它将返回与您关联的帐户列表。

答案 4 :(得分:0)

我同时收到“ app.vssps.visualstudio.com/_apis/accounts”和“ 发布https://dev.azure.com/ {organization1} / _ apis / Contribution / HierarchyQuery?api-version = 5.0-preview.1

状态码:203 状态描述:非权威信息

编辑: 没关系,它使用静态MSA clientid和replyURL:

internal const string clientId = "872cd9fa-d31f-45e0-9eab-6e460a02d1f1";          //change to your app registration's Application ID, unless you are an MSA backed account
            internal const string replyUri = "urn:ietf:wg:oauth:2.0:oob";                     //change to your app registration's reply URI, unless you are an MSA backed account

 //PromptBehavior.RefreshSession will enforce an authn prompt every time. NOTE: Auto will take your windows login state if possible
            result = ctx.AcquireTokenAsync(azureDevOpsResourceId, clientId, new Uri(replyUri), promptBehavior).Result;
            Console.WriteLine("Token expires on: " + result.ExpiresOn);

            var bearerAuthHeader = new AuthenticationHeaderValue("Bearer", result.AccessToken);

// Headers
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Add("User-Agent", "ManagedClientConsoleAppSample");
            client.DefaultRequestHeaders.Add("X-TFS-FedAuthRedirect", "Suppress");
            client.DefaultRequestHeaders.Authorization = authHeader;


            //Get Organizations
            client.BaseAddress = new Uri("https://app.vssps.visualstudio.com/");
            HttpResponseMessage response1 = client.GetAsync("_apis/accounts").Result;