从 Azure Devops WebApi 中的工作项检索拉取请求
Retrieve Pull Request from Work Item in Azure Devops WebApi
我想使用 Azure DevOps WebAPI 以编程方式检索与 Azure DevOps 中的工作项关联的所有拉取请求的信息。
我已经弄清楚如何检索
的实例
Microsoft.TeamFoundation.WorkItemTracking.WebApi.Model.WorkItem
对于我的工作项目。
要查找与其相关的拉取请求,我可以遍历 Relations 字段并找到 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
}
}
我的问题如下
- 解析 URL 以检索 Pull Request id 似乎不是执行此操作的好方法。我不能从某些字段中获取 ID 吗?
GetPullRequestAsync
需要提供者名称和存储库 ID。
但是如果不能从实例中检索到该信息
Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItemRelation
.
- 是否有另一种更简单的方法来完成我想做的事情?
与其依赖 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
}
}
据我所知,没有其他更好的方法来实现这一目标。目前已知的方法是从 url.
中检索 pull request id
从响应中您可以检索与 "name": "Pull Request"
的关系。然后你可以将url字符串拆分为%2F
,pull request id是最后一部分。
关于第二个问题,您可以使用此 Get Pull Request By Id rest api 获取拉取请求的详细信息。只需要在请求中提供 pull request id。
GET https://dev.azure.com/{organization}/{project}/_apis/git/pullrequests/{pullRequestId}?api-version=5.1
我想使用 Azure DevOps WebAPI 以编程方式检索与 Azure DevOps 中的工作项关联的所有拉取请求的信息。 我已经弄清楚如何检索
的实例Microsoft.TeamFoundation.WorkItemTracking.WebApi.Model.WorkItem
对于我的工作项目。
要查找与其相关的拉取请求,我可以遍历 Relations 字段并找到 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
}
}
我的问题如下
- 解析 URL 以检索 Pull Request id 似乎不是执行此操作的好方法。我不能从某些字段中获取 ID 吗?
GetPullRequestAsync
需要提供者名称和存储库 ID。 但是如果不能从实例中检索到该信息Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItemRelation
.- 是否有另一种更简单的方法来完成我想做的事情?
与其依赖 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
}
}
据我所知,没有其他更好的方法来实现这一目标。目前已知的方法是从 url.
中检索 pull request id从响应中您可以检索与 "name": "Pull Request"
的关系。然后你可以将url字符串拆分为%2F
,pull request id是最后一部分。
关于第二个问题,您可以使用此 Get Pull Request By Id rest api 获取拉取请求的详细信息。只需要在请求中提供 pull request id。
GET https://dev.azure.com/{organization}/{project}/_apis/git/pullrequests/{pullRequestId}?api-version=5.1