Search TFS代码搜索/工作休息API返回404

Search TFS代码搜索/工作休息API返回404,search,tfs,code-search,azure-devops-rest-api,Search,Tfs,Code Search,Azure Devops Rest Api,我们在前提下使用TFS TFS版本: 微软VisualStudio团队基金会服务器 2018年版16.122.27409.2 我们需要执行TFS源代码控制搜索 根据这一点,提出了使用tfsrestapi的方法。 构建和发布API正在工作,但搜索API返回404。 已安装搜索代码扩展,并且可以从TFS门户正常工作 API Url: POST:http://{DNS}:8080/tfs/{Collection}/{Project}/\u api/search/codesearchresults?ap

我们在前提下使用TFS

TFS版本: 微软VisualStudio团队基金会服务器 2018年版16.122.27409.2

我们需要执行TFS源代码控制搜索 根据这一点,提出了使用tfsrestapi的方法。 构建和发布API正在工作,但搜索API返回404。 已安装搜索代码扩展,并且可以从TFS门户正常工作

API Url:

POST:http://{DNS}:8080/tfs/{Collection}/{Project}/\u api/search/codesearchresults?api版本=4.1-preview.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
}
正如Daniel所说,你不能只在浏览器中打开它。您必须提供一个请求主体

因此,您可以使用诸如发送带有请求正文的请求之类的工具,也可以使用PowerShell调用带有请求正文的REST API

此外,根据我的测试,您提到的RESTAPI似乎不适用于本地TFS。我在TFS 2018 Update2版本16.131.27701.1上进行了测试,它总是返回计数: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 

嗨,安迪。谢谢你的详细回复。但是,我无法执行您描述的示例。我用的是邮递员和帕特认证。当我执行搜索请求时,我收到错误500,所需的防伪表单字段\uuu RequestVerificationToken要解决这个问题,我需要将\uu RequestVerificationToken作为表单而不是json请求发送。你知道为什么吗?可能是一些TFS服务器配置吗?@PrimeNum这对我来说意味着什么,但是我不能执行您描述的示例?运行PS脚本或任何其他问题时会出现哪些错误?您为PAT设置了正确的范围了吗?请您分享完整的错误信息或截图,然后我们可以进行相应的故障排除。嗨,安迪。我正在尝试使用Postman执行代码搜索。我在这里上传了一些详细的信息[链接]。我希望你能看一看。@PrimeNum不能在我这边重现这个问题,一切都按预期进行。但是,根据错误消息,您可以尝试在场景中添加IE,也可以将TFS地址添加到信任站点,然后再次检查。