如何通过编程方式获取Azure DevOps中的当前Sprint
问题原因
你碰到的203状态码是请求缺少Azure DevOps身份认证凭证导致的:浏览器访问时因为你已经提前登录过DevOps站点,请求会自动带上有效的身份Cookie,因此可以正常拿到结果;而你写的代码里直接初始化了HttpClient,没有附带任何认证信息,就会被DevOps的鉴权层拦截返回203。
解决步骤
1. 生成个人访问令牌(PAT)
- 打开Azure DevOps站点,点击右上角用户头像,选择「个人访问令牌」
- 新建令牌,按需设置过期时间,权限勾选「工作项读取」及迭代相关的读取权限,生成后保存令牌字符串(仅会显示一次,请注意备份)
2. 修正C#代码,添加认证头
Azure DevOps的API认证使用Basic方案,认证头构造规则为:用户名填任意非空值,密码为你生成的PAT,将用户名:PAT的字符串做Base64编码后放到Authorization头即可。
修正后代码示例:
using System.Net.Http.Headers; using System.Text; // 注意:HttpClient建议全局单例使用,避免频繁创建导致套接字资源浪费 HttpClient client = new HttpClient(); // 替换为你自己生成的PAT string personalAccessToken = "你生成的个人访问令牌"; string authInfo = Convert.ToBase64String(Encoding.ASCII.GetBytes($"user:{personalAccessToken}")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authInfo); Uri url = new Uri("https://abcd.visualstudio.com/myproject/_apis/work/teamsettings/iterations?$timeframe=current&api-version=5.1"); HttpResponseMessage response = await client.GetAsync(url); if (response.IsSuccessStatusCode) { string content = await response.Content.ReadAsStringAsync(); // 此处处理返回的迭代信息JSON即可 }
额外注意事项
- 如果你的DevOps组织开启了第三方应用访问限制,需要确认生成PAT的账号有对应接口的访问权限
- 如果你要获取指定团队的迭代,需要在请求URL里补全团队路径,否则默认返回项目默认团队的迭代数据
- PAT权限按需分配即可,不要授予不必要的全权限,避免令牌泄露后带来安全风险
内容的提问来源于stack exchange,提问作者WorksOnMyLocal
相关产品推荐
相关产品推荐

