Получение всех заданий от azure devops - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь получить все задания от Azure DevOps. Я пытаюсь следовать этой документации: https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/?view=azure-devops-rest-5.0#a -flat-query

Я использую этот фрагмент для выполнения запросов:

using (HttpClient client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(
        new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
        Convert.ToBase64String(
            System.Text.ASCIIEncoding.ASCII.GetBytes(
                string.Format("{0}:{1}", "", personalaccesstoken))));

    using (HttpResponseMessage response = await client.GetAsync(url))
    {
        response.EnsureSuccessStatusCode();
        var json = await response.Content.ReadAsStringAsync();

        JToken parsedJson = JToken.Parse(json);
        return parsedJson.ToString(Formatting.Indented);
    }
}

Насколько я понимаю, вы не можете просто получите все задания. Первым шагом является получение идентификаторов для всех задач, и это необходимо сделать с помощью запроса WIQL. Поправьте меня, если я ошибаюсь.

Поэтому я пытаюсь позвонить следующим, чтобы получить некоторые данные для начала: https://dev.azure.com/xxxprod/XXX/XXX Команда / _apis / wit / wiql? $ Top = 100 & api- версия = 5.0

Однако я не могу получить номер 405 и могу звонить на другие звонки, например: https://dev.azure.com/xxxprod/_apis/projects

Может ли кто-нибудь предоставить пример или инструкцию о том, как получить все задачи через REST API?

1 Ответ

0 голосов
/ 08 апреля 2020

Насколько я понимаю, вы не можете просто получить все задания. Первым шагом является получение идентификаторов для всех задач, и это необходимо сделать с помощью запроса WIQL.

В этом вопросе вы правы. Мы могли бы написать WIQL-запрос для получения системных идентификаторов, затем мы могли бы в соответствии с system.Ids запрашивать рабочие элементы.

Сначала вы можете использовать wiql api рабочего элемента для запроса этих элементов:

POST https://dev.azure.com/{org}/{pro}/_apis/wit/wiql?api-version=5.1

Тело запроса:

{
  "query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Task'"
}

Мой результат в почтальоне: Результат моего запроса

Тогда вы можете использовать рабочий элемент list api для вывода списка всех рабочих элементов задачи, запрашиваемых на предыдущем шаге.

Пример в сценариях powershell:

# запрос этих элементов

$qurl =  "https://dev.azure.com/{org}/{proj}/_apis/wit/wiql?api-version=5.1"

$WIQL_query = "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Task'"
$body = @{ query = $WIQL_query }
$bodyJson=@($body) | ConvertTo-Json

$pat = {PAT}

$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($pat)"))

$result = Invoke-RestMethod -Uri $qurl -Headers @{authorization = "Basic $base64AuthInfo"} -Method post -ContentType "application/json" -Body $bodyJson

# получить работу идентификаторы элементов

$ids = $result.workItems | select id | foreach{ $_.id }
$id= '{0}' -f ($ids -join ",")

# используйте API списка рабочих элементов для отображения этих рабочих элементов

$url = "https://dev.azure.com/{ORG}/{PROJ}/_apis/wit/workitems?ids=$($id)&api-version=5.1"

$result1 = Invoke-RestMethod -Uri $url -Headers @{authorization = "Basic $base64AuthInfo"} -Method get
...