我想使用Azure DevOps WebAPI以编程方式检索与Azure DevOps中的工作项相关的所有拉取请求的信息。 我已经弄清楚了如何检索
的实例Microsoft.TeamFoundation.WorkItemTracking.WebApi.Model.WorkItem
关于我的工作项目。
要查找与此相关的拉取请求,我可以遍历“关系”字段并找到Url包含PullRequestId
的关系。在该字符串的末尾,我可以找到要与GetPullRequestAsync
一起使用的Pull Request ID。
URL可能看起来像这样:
vstfs:///Git/PullRequestId/2139bb34-57e3-4d7d-a6e1-1c0542a45e29%2F8a2b707f-ca7a-418d-8462-2bf076a54aad%2F39723
所以我的代码如下:
foreach ( WorkItemRelation wir in wi.Relations)
{
if ( wir.Url.Contains("PullRequestId"))
{
var pr = build.GetPullRequestAsync("<MyProject>", "Providername", "39723", "repository id").Result;
// Do somethin with pr object
}
}
以下是我的问题
GetPullRequestAsync
需要提供者名称和存储库ID。
但是,该信息是否应从以下实例中获取:
Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItemRelation
。答案 0 :(得分:1)
建议您不要使用PullRequestId
属性。在URL中,您将找到所需的全部内容:
var credential = new VssBasicCredential(string.Empty, "PAT");
var connection = new VssConnection(new Uri("https://dev.azure.com/thecodemanual/"), credential);
var witClient = connection.GetClient<WorkItemTrackingHttpClient>();
var build = connection.GetClient<BuildHttpClient>();
var repoClient = connection.GetClient<GitHttpClient>();
var workItem = witClient.GetWorkItemAsync(1, expand: Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItemExpand.Relations).Result;
foreach (var relation in workItem.Relations)
{
if((string)relation.Attributes["name"] == "Pull Request")
{
Console.WriteLine(relation.Url);
var segment = relation.Url.Split("/").Last();
var ids = segment.Split("%2F");
var repo = repoClient.GetRepositoryAsync(ids[1]).Result;
Console.WriteLine(repo.Name);
var pr = build.GetPullRequestAsync(ids[0], "TfsGit", ids[2], ids[1]).Result;
Console.WriteLine(pr.Title);
// Do somethin with pr object
}
}
答案 1 :(得分:0)
据我所知,没有其他更好的方法可以实现这一目标。当前已知的方法是从网址中检索拉取请求ID。
从响应中,您可以检索与"name": "Pull Request"
的关系。然后,您可以使用%2F
拆分url字符串,提取请求ID是最后一部分。
关于第二个问题,您可以使用此Get Pull Request By Id rest api获取请求请求的详细信息。只需在请求中提供拉取请求ID。
GET https://dev.azure.com/{organization}/{project}/_apis/git/pullrequests/{pullRequestId}?api-version=5.1