TFS Git Commit网页API调用以获取相关的WorkItems

时间:2018-01-26 13:41:56

标签: c# git api tfs

我正在尝试通过TFS REST API获得与Git Commit相关的工作项。我没有在网上找到例子,但是tfs门户网站似乎通过使用'associatedWorkItems'api调用来获取这些信息......

当我导航到我的TFS门户网站以获取给定的Git Commit:

的http:// {实例} / {收集} / {项目} / _git / {库} /提交/ {的commitid}

如果我检查网络流量,我会看到一个POST呼叫:

的http:// {实例} / {收集} / {专案编号} / _api / _versioncontrol / associatedWorkItems __ V = 5

在请求中发送这些Body Form Parameters:

  • repositoryId (GUID) - 我已经有了这个
  • 版本 - 类似于 GC27a36707252ac9db742cc259a1018b9750d8e9a2(这是什么?)
  • __ RequestVerificationToken - API防伪令牌。

此调用返回__wrappedArray集合中关联工作项的列表。

有没有办法从TFS REST API调用它?如果是这样,我在哪里可以获得版本和RequestVerificationToken参数值?

这与我之前的问题有关: Get latest Associated Work Items for Git Commit using TFS REST API

更新:我尝试@ PatrickLu-MSFT建议将'IncludeWorkItems'参数传递给GetcommitsAsync,但仍将WorkItems返回为null:

GitQueryCommitsCriteria crit = new GitQueryCommitsCriteria();
crit.IncludeWorkItems = true;
crit.Ids = new List<string>(){"27a36707252ac9db742cc259a1018b9750d8e9a2"};

var commitTest = gitClient.GetCommitsAsync(repo.Id, crit).Result.FirstOrDefault();
//commitTest.WorkItems == null

2 个答案:

答案 0 :(得分:2)

不幸的是,如前所述,目前还没有这种Rest API能够直接显示与GIT提交相关的工作项。

这里还有一个相关的uservoice供您参考:

  

Rest API - 能够显示与GIT提交相关联的工作项

     

https://visualstudio.uservoice.com/forums/330519-visual-studio-team-services/suggestions/5951867-rest-api-ability-to-show-work-items-associated-w

您从使用的网络流量中看到的API,可能是内部方式。您也可以从API版本判断它,_v=5 5目前绝对不是已发布的Rest API版本。

作为一种解决方法,您可以尝试使用.Net Client执行类似的任务。

GitHttpClientBase.GetCommitsAsync中指定GitQueryCommitsCriteria.IncludeWorkItems = true会返回GitCommitRef.WorkItems中的关联工作项。注意:IncludeWorkItems和WorkItems都有[EditorBrowsable(EditorBrowsableState.Never)],它从编辑器建议中隐藏它。

答案 1 :(得分:1)

至少在TFS 2018.2中,您实际上可以使用GetCommits来实现,尽管您应该通过ItemVersion / FromCommitId设置commitIds(GitQueryCommitsCriteria.Ids不起作用):

var wiIds = (await git
    .GetCommitsAsync(
        project,
        repository,
        new GitQueryCommitsCriteria
        {
            // Ids query disregards IncludeWorkItems parameter.
            // ItemVersion query seems to disregard the Top parameter and returns 100 commits instead at least in TFS 2018.2.
            // So we use From+To query.
            FromCommitId = commitId,
            ToCommitId = commitId,
            IncludeWorkItems = true,
            Top = 1
        }))
    .Single()
    .WorkItems()
    .Select(wiRef => 
        Int32.Parse(wiRef.Id))