0

我们在本地使用 TFS。

TFS 版本: Microsoft Visual Studio Team Foundation Server 版本 16.122.27409.2 (2018)。

我们需要执行 TFS 源代码控制(代码搜索)根据MS API 文档以这种方式使用 TFS REST API。构建和发布 API 正在工作,但搜索 API 返回 404。从 TFS 门户安装搜索代码扩展并正常工作。

API 网址:

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

结果: 搜索代码结果

请帮忙,我在做什么,做错了吗?

4

2 回答 2

1

您不能只在浏览器中打开它。您必须提供一个请求正文,如 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
}
于 2018-05-24T20:19:11.390 回答
0

正如丹尼尔所说“ 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 

在此处输入图像描述

于 2018-05-25T06:07:45.460 回答