【问题标题】:Getting workitems link using TFS C# API使用 TFS C# API 获取工作项链接
【发布时间】:2026-01-25 11:35:01
【问题描述】:

我是 TFS API 的新手,我正在使用 C# 代码,如下所述: https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/client-libraries/samples?view=azure-devops

我成功地在我的 TFS 测试服务器上运行了代码,并且很容易获得查询结果。但是,当我尝试获取工作项链接详细信息时,我找不到正确的方法。 当我在代码执行期间放大到 1 个对象时,我看到 Links 属性设置为 null,而 TFS 中的“真实”工作项作为链接的 WI 作为父级。知道如何通过 WI 链接循环获取链接的 WI 详细信息吗? 非常感谢:-)

【问题讨论】:

  • 发布您收到的回复
  • 你使用的是 Rest API 还是 SOAP?
  • 我正在使用 Rest API

标签: c# azure-devops tfs-sdk


【解决方案1】:

您必须在 GetWorkItemAsync 中设置 expand 属性:

GetWorkItemAsync(Id, expand: WorkItemExpand.Relations).Result

您可以在关系列表中找到所有链接。链接不包含 id,但您可以从链接 URL 中提取它。父类型是 Rel 成员中的 System.LinkTypes.Hierarchy-Reverse 值。关系列表示例:

var wi = GetWorkItemWithRelations(wiId);

if (wi.Relations != null)
    {
        foreach (var wiLink in wi.Relations)
        Console.WriteLine("{0,-40}: {1}", wiLink.Rel, ExtractWiIdFromUrl(wiLink.Url));
    }

static int ExtractWiIdFromUrl(string Url)
{
    int id = -1;

    string splitStr = "_apis/wit/workItems/";

    if (Url.Contains(splitStr))
    {
        string [] strarr = Url.Split(new string[] { splitStr }, StringSplitOptions.RemoveEmptyEntries);

        if (strarr.Length == 2 && int.TryParse(strarr[1], out id))
                return id;
    }

    return id;
}

您可以在此处找到其他链接类型:https://docs.microsoft.com/en-us/azure/devops/boards/queries/link-type-reference?view=azure-devops&viewFallbackFrom=vsts

【讨论】:

  • 您能否与我分享指向文档的链接,以了解如何通过链接循环访问链接的 WI?或任何一般文件?再次感谢!
  • @UziYona 所有链接都包含在 WorkItem 类的 WorkItemRelation 列表中。有我的调查,也许对你有用:Get Work Items,Add and Edit Work Item Links
  • 再次感谢亚历山大!但是,当我通过关系循环时,我确实得到了 lonks,但我没有得到链接类型。我得到以下关系(链接?)示例:my serverdetails/_apis/wit/workItems/894 和 894 是链接的工作项,但我找不到获取链接类型的方法(例如父级)。有什么想法吗?
  • @UziYona 我已经用代码示例更新了我的答案。
  • @UziYona 接受作为答案告诉所有成员您的问题已解决:*.com/help/someone-answers