You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过RestAPI从Azure DevOps 2019获取GlobalLists?相关API端点有效性确认

如何通过REST API获取Azure DevOps的全局列表?

首先明确说:你找到的那个端点 GET https://{instance}/{collection}/_apis/work/processes/lists?api-version=5.0-preview.1 并不是用来获取集合级全局列表的——它返回的是和特定工作项进程(比如Agile、Scrum模板)绑定的进程级列表,这类列表只属于该进程对应的项目,不是跨项目的全局列表。

好消息是,Azure DevOps其实有专门的REST API可以直接获取集合级的全局列表,返回JSON格式,完全不用手动解析XML,端点是:

GET https://{instance}/{collection}/_apis/wit/globallists?api-version=7.1-preview.1

(可以根据需要调整api-version,比如用最新的稳定版,目前7.1-preview.1已经是比较成熟的预览版,后续也会有正式版推出)

这个API返回的结构很清晰,示例如下:

{
  "count": 1,
  "value": [
    {
      "name": "SampleGlobalList",
      "items": [
        { "value": "Option A" },
        { "value": "Option B" }
      ]
    }
  ]
}

如果你还是想用客户端库的方式,之前提到的ExportGlobalLists方法确实需要解析XML,但可以借助序列化工具来简化操作,比如在C#里用XmlSerializer自动映射XML到实体类,不用手动去节点里抠数据:

using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.VisualStudio.Services.Common;
using System.Xml.Serialization;
using System.IO;

// 先定义对应XML结构的实体类
[XmlRoot("gl:globalLists", Namespace = "http://schemas.microsoft.com/VisualStudio/2005/workitemtracking/globallists")]
public class GlobalLists
{
    [XmlElement("globalList")]
    public List<GlobalList> Items { get; set; }
}

public class GlobalList
{
    [XmlAttribute("name")]
    public string Name { get; set; }

    [XmlElement("LISTITEM")]
    public List<ListItem> ListItems { get; set; }
}

public class ListItem
{
    [XmlAttribute("value")]
    public string Value { get; set; }
}

// 调用方法并解析
var orgUrl = "https://dev.azure.com/your-org";
var collection = "your-collection";
var client = new WorkItemTrackingHttpClient(new Uri($"{orgUrl}/{collection}"), new VssCredentials());
var xmlContent = await client.ExportGlobalListsAsync();

var serializer = new XmlSerializer(typeof(GlobalLists));
using var reader = new StringReader(xmlContent);
var globalLists = (GlobalLists)serializer.Deserialize(reader);

// 现在可以直接操作globalLists对象了
foreach (var list in globalLists.Items)
{
    Console.WriteLine($"全局列表:{list.Name}");
    foreach (var item in list.ListItems)
    {
        Console.WriteLine($"- {item.Value}");
    }
}

最后再帮你区分一下两种列表的差异:

  • 集合级全局列表:跨所有项目和进程,是真正意义上的全局列表,用wit/globallists API获取。
  • 进程级列表:属于特定工作项进程,只有使用该进程的项目能看到,用你找到的processes/lists API获取。

内容的提问来源于stack exchange,提问作者Admiral Land

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 17:02:32