TFS Code Search/Work Rest API возвращает 404

Мы используем TFS на месте.

Версия TFS: Microsoft Visual Studio Team Foundation Server Версия 16.122.27409.2 (2018).

Нам нужно выполнить контроль исходного кода TFS (поиск кода). В соответствии с документацией MS API это способ использования TFS REST API. API сборки и выпуска работают, но API поиска возвращает 404. Расширение кода поиска установлено и работает нормально с портала TFS.

URL API:

POST: http: // {DNS}: 8080 / tfs / {Collection} / {Project} /_apis/search/codesearchresults?api-version=4.1-preview.1

результат: Результат поиска кода

Пожалуйста, помогите, что я делаю не так?

2 ответа

Вы не можете просто открыть его в браузере. Вы должны предоставить тело запроса, как четко указано в примерах API:

{
  "searchText": "CodeSearchController",
  "$skip": 0,
  "$top": 1,
  "filters": {
    "Project": [
      "MyFirstProject"
    ],
    "Repository": [
      "MyFirstProject"
    ],
    "Path": [
      "/"
    ],
    "Branch": [
      "master"
    ],
    "CodeElement": [
      "def",
      "class"
    ]
  },
  "$orderBy": [
    {
      "field": "filename",
      "sortOrder": "ASC"
    }
  ],
  "includeFacets": true
}

Как сказал ДаниилYou can't just open it in a browser. You have to provide a request body"

Таким образом, вы можете использовать такие инструменты, как Postman, для отправки запроса с телом запроса, или вы можете использовать PowerShell для вызова REST API с телом запроса.

Кроме того, основываясь на моем тесте, кажется, что REST API, который вы упомянули ( результаты поиска кода), не применим к локальной TFS. Я тестировал на TFS 2018 Update2 (Version 16.131.27701.1) всегда возвращаюсь "count": 0,,

Однако вы можете использовать ниже REST API для поиска кода:

POST http://server:8080/tfs/DefaultCollection/{Project}/_api/_search/postCodeQuery?api-version=4.1-preview.1

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

{"searchText":"<test1>",
 "scope":"Team Foundation Server",
 "filters":"{\"ProjectFilters\":[\"0511ScrumTFVC\"]}",
 "skipResults":0,
 "takeResults":50,
 "sortOptions":""   
}

Ниже образец PowerShell для вашей справки:

Param(
   [string]$baseurl = "http://server:8080/tfs/DefaultCollection",  
   [string]$projectName = "ProjectName",
   [string]$user = "username",
   [string]$token = "password"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))


function CreateJsonBody
{

    $value = @"

{"searchText":"<test1>",
 "scope":"Team Foundation Server",
 "filters":"{\"ProjectFilters\":[\"ProjectName\"]}",
 "skipResults":0,
 "takeResults":50,
 "sortOptions":""   
}

"@

 return $value
}

$json = CreateJsonBody

$uri = "$baseurl/$($projectName)/_api/_search/postCodeQuery?api-version=4.1-preview.1"
Write-Host $uri
$result = Invoke-RestMethod -Uri $uri -Method POST -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

$result = $result | convertto-json

Write-host $result 

введите описание изображения здесь

Другие вопросы по тегам