如何用C#调用Azure DevOps中的Analytics视图数据?
使用Simple.OData.Client调用Azure DevOps Analytics视图
第一步:确认Analytics视图的OData集合名称
在Azure DevOps中打开你的Analytics视图,点击「导出到Power BI」,弹出的对话框里会显示完整的OData URL,URL末尾的部分就是集合名称(比如http://myServer/tfs/myOrg/myTeam/_odata/V3.0/My_Analytics_View里的My_Analytics_View)。如果视图名称包含空格或特殊字符,会自动转成下划线。第二步:调用视图获取数据
用Simple.OData.Client的For方法指定集合名称,再通过FindEntriesAsync获取数据,示例代码如下:
using Simple.OData.Client; using System.Net; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var settings = new ODataClientSettings("http://myServer/tfs/myOrg/myTeam/_odata/V3.0/", new NetworkCredential("myName", "myPw", "myDomain")); // 如果是Azure DevOps Services云版本,建议用PAT验证: // settings.BeforeRequest += request => request.Headers.Add("Authorization", $"Basic {Convert.ToBase64String(Encoding.ASCII.GetBytes($":{yourPAT}"))}"); var client = new ODataClient(settings); // 替换成你的Analytics视图对应的集合名称 var viewName = "My_Analytics_View"; // 基础查询:获取所有数据 var entries = await client.For(viewName).FindEntriesAsync(); // 带筛选和字段选择的查询示例 var filteredEntries = await client.For(viewName) .Filter(item => item["State"] != "Closed") .Select(item => new { item.Id, item.Title, item.State, item.CreatedDate }) .OrderBy(item => item["CreatedDate"]) .FindEntriesAsync(); // 遍历输出结果 foreach (var entry in filteredEntries) { Console.WriteLine($"ID: {entry["Id"]}, Title: {entry["Title"]}, State: {entry["State"]}"); } } }
- 第三步:处理带参数的Analytics视图
如果你的视图定义了参数(比如日期范围),需要通过WithParameters传递参数值:
var parameters = new Dictionary<string, object> { { "StartDate", new DateTime(2024, 1, 1) }, { "EndDate", DateTime.UtcNow } }; var parameterizedEntries = await client.For(viewName) .WithParameters(parameters) .FindEntriesAsync();
- 注意事项
- 确保你的账号拥有该Analytics视图的访问权限,以及Azure DevOps项目的相应权限。
- 若使用Azure DevOps Services云版本,不建议用域账号验证,推荐使用个人访问令牌(PAT),需授予
Analytics Read权限。 - 遇到401/403错误时检查验证信息和权限配置;遇到404错误时确认集合名称和OData端点路径是否正确。
内容的提问来源于stack exchange,提问作者Cogeck
相关产品推荐
相关产品推荐

