如何通过TFS REST API获取Git Commit关联工作项?含调用问题
关于通过TFS API获取Git Commit关联工作项的问题解答
我来帮你一步步拆解解决这个问题:
1. 能否调用内部的associatedWorkItems接口?
首先要明确:你抓包到的associatedWorkItems是TFS门户内部使用的非公开API,微软并未将其纳入官方文档的REST API体系。虽然技术上可以构造请求调用,但这类接口没有兼容性保障——TFS版本更新后可能会修改路径、参数或验证逻辑,导致你的代码突然失效。所以更稳妥的方案是优先使用官方公开的API。
2. versions参数的含义与生成方式
你看到的versions格式GC{commitId}其实很简单:GC是Git Commit的缩写,后面直接拼接目标Commit的完整哈希值即可。比如你例子里的GC27a36707252ac9db742cc259a1018b9750d8e9a2,就是把GC前缀和你要查询的Commit ID组合起来,不需要额外加密或转换。
3. 获取__RequestVerificationToken的方法
这个令牌是TFS用来防范CSRF攻击的,获取方式有两种:
- 从页面隐藏字段提取:先登录TFS门户,访问任意需要登录的页面(比如Commit详情页),在页面HTML中搜索
<input name="__RequestVerificationToken" type="hidden" value="XXX" />,提取value属性的值即可。 - 从Cookie提取:登录后,浏览器的Cookie中会包含
__RequestVerificationToken字段,直接取这个字段的值就行。
需要注意的是,调用这个内部接口时,必须携带登录后的会话Cookie(比如TFSSession类的Cookie)和这个令牌,否则会返回403或400错误。
4. 解决GetcommitsAsync中WorkItems为null的问题
你设置了IncludeWorkItems=true但返回结果为空,可能有这几个原因:
- Commit确实未关联工作项:先确认这个Commit在TFS门户里是否真的绑定了工作项,避免排查方向错误。
- 权限不足:确保你的账号拥有读取该项目工作项的权限,没有权限的话API会静默返回空集合。
- 客户端库版本问题:如果使用的是旧版TFS客户端SDK(比如
Microsoft.TeamFoundationServer.Client),可能存在IncludeWorkItems参数不生效的bug,尝试更新到最新稳定版。 - 直接调用官方REST API验证:绕过客户端库,直接发送HTTP请求测试:
如果这个请求返回的结果里有GET http://{instance}/{collection}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}?includeWorkItems=true&api-version=6.0workItems字段,说明客户端库存在问题;如果还是空,那大概率是Commit本身无关联或权限问题。
内容的提问来源于stack exchange,提问作者Adolfo Perez
相关产品推荐
相关产品推荐

