通过ADO REST API关联分支与工作项后PR未自动关联问题
你遇到的问题核心是:通过Work Items - Update接口添加的分支链接类型不符合要求,导致PR创建页无法自动识别关联的工作项。ADO门户操作时会创建特定的分支类型链接,而普通的关联链接不会被PR页面自动抓取。
关键差异
ADO门户关联分支时,会为工作项添加ArtifactLink类型的链接,且指定attributes.name = "Branch",同时分支URL使用ADO内部的vstfs:///Git/Ref/格式。而你之前调用API时,可能只是创建了普通的Related类型链接,或者链接属性、URL格式不符合PR页面的识别规则。
正确的API调用方式
方式1:修正Work Items - Update接口的Payload
直接使用Work Items - Update接口,但确保链接的类型和参数正确:
请求方法:PATCH
URL:https://dev.azure.com/{org}/{proj}/_apis/wit/workitems/{workItemId}?api-version=7.1-preview.3
Headers:Content-Type: application/json-patch+json
Payload示例:
[ { "op": "add", "path": "/relations/-", "value": { "rel": "ArtifactLink", "url": "vstfs:///Git/Ref/{projectId}/{repoId}/refs/heads/target", "attributes": { "name": "Branch", "comment": "" } } } ]
注意:
{projectId}和{repoId}需要替换为你的项目ID和仓库ID(可通过Git仓库的REST API获取)- 分支URL必须是
vstfs:///Git/Ref/开头的内部格式,不能用HTTP的分支地址
方式2:使用/_api/wit/$batch接口(与门户操作一致)
如果想完全对齐门户的操作逻辑,可以调用批量处理接口,结构如下:
请求方法:POST
URL:https://dev.azure.com/{org}/{proj}/_api/wit/$batch
Headers:Content-Type: application/json
Payload示例:
{ "requests": [ { "method": "PATCH", "uri": "/_apis/wit/workitems/{workItemId}?api-version=7.1-preview.3", "headers": { "Content-Type": "application/json-patch+json" }, "body": [ { "op": "add", "path": "/relations/-", "value": { "rel": "ArtifactLink", "url": "vstfs:///Git/Ref/{projectId}/{repoId}/refs/heads/target", "attributes": { "name": "Branch", "comment": "" } } } ] } ] }
验证与修复
- 调用API后,打开工作项页面,查看链接区域,确认分支显示为分支类型(而非“相关”或其他类型)
- 如果之前添加过错误的链接,需要先通过
Work Items - Update接口的remove操作删除旧链接,再添加正确的分支链接
完成以上操作后,从私有分支向target分支创建PR时,页面就会自动显示关联的工作项了。
内容的提问来源于stack exchange,提问作者Heheng Li

