TFS 2015 vNext构建定义REST API无法获取完整属性问题
解决TFS 2015 vNext构建API无法获取完整属性的问题
我来帮你梳理下这个问题的根源和解决办法哈——你遇到的核心问题是:TFS 2015的REST API 2.0版本根本不支持includeAllProperties这个参数。这个参数是后来Azure DevOps Services(以前叫VSTS)的API版本才新增的特性,在TFS2015的API里完全没实现,所以不管你把参数值设成true、TRUE还是0,都不会有任何效果。
那在TFS2015里怎么才能拿到构建定义的完整映射属性呢?给你两个可行的方案:
方案1:先拿列表ID,再逐个查询单个构建定义
TFS2015的API有个特点:当你查询单个构建定义的时候,会默认返回它的所有完整属性;但批量查询列表时,只会返回精简的基础信息。所以你可以分两步走:
// 第一步:获取所有构建定义的ID列表(返回精简数据,只提取ID即可) var listData = wc.OpenRead("http://{你的TFS服务器地址}/tfs/{集合名}/{项目名}/_apis/build/definitions?api-version=2.0"); var listResponse = new StreamReader(listData).ReadToEnd(); // 自行解析listResponse,把每个构建定义的id提取出来存入集合 // 第二步:循环调用单个构建定义接口,获取完整属性 foreach(var buildId in 你提取的ID集合) { var singleDefData = wc.OpenRead($"http://{你的TFS服务器地址}/tfs/{集合名}/{项目名}/_apis/build/definitions/{buildId}?api-version=2.0"); var fullDefResponse = new StreamReader(singleDefData).ReadToEnd(); // 这里的fullDefResponse就包含了该构建定义的所有映射属性 }
另外提个小细节:你代码里写的dev.azure.com是云端Azure DevOps的域名,如果你的TFS是本地部署的,一定要改成自己的TFS服务器地址(比如http://tfs-server:8080/tfs/...),不然可能连接口都没正确访问到。
方案2:尝试旧版API(不推荐,仅作备选)
TFS2015还保留了api-version=1.0的旧版API,你可以试试用这个版本调用列表接口,但这个版本对vNext构建的支持有限,大概率还是不如方案1靠谱,所以优先推荐方案1。
总结一下:
includeAllProperties在TFS2015的API 2.0里不存在,设置后不会生效- 最可靠的方式是先批量获取构建定义ID,再逐个查询单个定义的完整信息
- 先确认你的API端点地址是否符合本地TFS的格式,避免误用云端域名
内容的提问来源于stack exchange,提问作者MisterGray
相关产品推荐
相关产品推荐

