Azure DevOps调用GetPullRequestStatusesAsync查询PR状态返回空问题
问题根因
你调用的GetPullRequestStatusesAsync接口用途和你的需求完全不匹配:该接口仅返回PR关联的附加状态检查结果,比如CI构建结果、代码合规扫描结果这类自定义配置的检查项。如果仓库没有给PR配置这类检查规则,无论PR本身处于什么生命周期,该接口的返回结果都会是空数组。
正确判断PR状态的方案
你需要先获取PR的基础信息对象,再通过对象自带的状态属性判断所属类型:
- 首先读取PR对象的
Status属性,对应PullRequestStatus枚举,可直接识别三类核心状态:Abandoned:已废弃/已关闭Completed:已合并Active:处于开放流程中
- 当
Status为Active时,再读取MergeStatus属性,对应PullRequestAsyncStatus枚举,进一步细分状态:Conflicts:存在合并冲突Queued/InProgress:合并流程处理中Succeeded:无冲突,正常待评审/待合入
修正后的测试代码
using Microsoft.VisualStudio.Services.Common; using Microsoft.VisualStudio.Services.WebApi; using Microsoft.TeamFoundation.SourceControl.WebApi; var collection = "https://myurl"; var project = "pro"; var repo = "repo"; var codepat = Environment.GetEnvironmentVariable("code_pat"); if (codepat.IsNullOrEmpty()) { throw new Exception($"code_pat must be set in the environment."); } var creds = new VssBasicCredential(string.Empty, codepat); var conn = new VssConnection(new Uri(collection), creds); using var gitClient = conn.GetClient<GitHttpClient>(); var srcRepo = gitClient.GetRepositoryAsync(project, repo).Result; int[] prids = { 2345, 3254, 7645, 1357 }; foreach(var id in prids) { Console.WriteLine($"id: {id}"); // 获取PR完整基础信息 var pr = gitClient.GetPullRequestAsync(srcRepo.Id, id).Result; string prStatusDesc = pr.Status switch { PullRequestStatus.Abandoned => "已废弃/已关闭", PullRequestStatus.Completed => "已合并", PullRequestStatus.Active => pr.MergeStatus switch { PullRequestAsyncStatus.Conflicts => "活跃-存在合并冲突", PullRequestAsyncStatus.Queued or PullRequestAsyncStatus.InProgress => "合并中", PullRequestAsyncStatus.Succeeded => "活跃-无冲突待处理", _ => "活跃-合并状态未知" }, _ => "未知状态" }; Console.WriteLine($"- 状态:{prStatusDesc}"); Console.WriteLine(); }
内容的提问来源于stack exchange,提问作者B.McKee
相关产品推荐
相关产品推荐

