TFS Code Search / Work Rest API возвращает 404 - PullRequest
0 голосов
/ 24 мая 2018

мы используем локальную 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

результат: Search code result

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

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

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

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

Кроме того, на основании моего теста кажется, что упомянутый вами 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 

enter image description here

0 голосов
/ 24 мая 2018

Вы не можете просто открыть его в браузере.Вы должны предоставить тело запроса, как четко указано в примерах 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
}
...