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