【问题标题】:VSTS work items list through REST API通过 REST API 列出 VSTS 工作项列表
【发布时间】:2016-08-19 08:04:31
【问题描述】:

如何使用 REST API 从 VSTS 获取工作项列表?

根据documentationids 参数是可选的,但是当我省略它时,我得到一个404 错误。 如果我添加ids参数,我可以得到项目。

请求失败:
GET https://{account}.visualstudio.com/DefaultCollection/_apis/wit/workitems?api-version=1.0

成功请求:
GET https://{account}.visualstudio.com/DefaultCollection/_apis/wit/workitems?ids=252&api-version=1.0

两者的身份验证相同。

要解决的完整问题是:获取特定 VSTS 项目中的所有功能

【问题讨论】:

  • 你有没有偶然解决过这个问题?
  • 不,还不能解决
  • @fra 你能告诉我你是如何实现身份验证的吗?您如何获取令牌以及如何使用 api 发送令牌以获取工作项?提前致谢

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


【解决方案1】:

关键是使用 API 的 WIQL 部分,而不是工作项之一。 例如,要获取某种类型的工作项的平面列表,请使用以下命令: https://www.visualstudio.com/en-us/docs/integrate/api/wit/wiql#a-flat-query

PowerShell 中的示例(显示所有处于关闭状态的用户故事):

    # using env vars passed from VSTS build
    $collectionuri = $Env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
    $token = $Env:SYSTEM_ACCESSTOKEN # need to configure build to allow passing OAuth tokens

    $basicAuth = "{0}:{1}"-f "ivan-the-terrible", $token
    $basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth)
    $basicAuth = [System.Convert]::ToBase64String($basicAuth)
    $headers = @{Authorization=("Basic {0}"-f $basicAuth)}

    $WorkItemType = 'User Story'

    $url = $collectionuri + 'DefaultCollection/_apis/wit/wiql?api-version=1.0'

    $WIQL_query = "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = '" + $WorkItemType + "' AND [State] = 'Closed' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc"
    $body = @{ query = $WIQL_query }
    $bodyJson=@($body) | ConvertTo-Json

    $response = Invoke-RestMethod -Uri $url -headers $headers -Method Post -ContentType "application/json" -Body $bodyJson

    $workitems = $response.workItems

    Write-Host "Found" $workitems.Count "work items of type:" $WorkItemType

【讨论】:

    【解决方案2】:

    这是我用 C# 编写的类似解决方案,用于返回 Ticket 类型的所有工作项的列表。我能够使用已接受答案中提供的示例并查看文档here

    来构建此结果
    public QueryResult GetTickets()
    {
        try
        {
            var token = "****";
    
            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                    Convert.ToBase64String(
                        System.Text.ASCIIEncoding.ASCII.GetBytes(
                            string.Format("{0}:{1}", "", token))));
    
                var query = "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Ticket' AND [State] <> 'Closed' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate]";                    
                var content = new StringContent("{ \"query\": \"" + query + "\" }", Encoding.UTF8, "application/json");
                var url = "https://{account}.visualstudio.com/_apis/wit/wiql?api-version=4.1";
    
                using (HttpResponseMessage response = client.PostAsync(url, content).Result)
                {
                    response.EnsureSuccessStatusCode();
                    string responseBody = response.Content.ReadAsStringAsync().Result;
                    var result = JsonConvert.DeserializeObject<QueryResult>(responseBody);
    
                    return result;
                }
            }
        }
        catch(Exception ex)
        {
            return null;
        }            
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-27
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2020-03-30
      • 2019-03-11
      相关资源
      最近更新 更多