消费TFS Web Hooks(HTTP Post方式):请求格式及事件内容问询
嘿,关于TFS Webhooks的请求格式和Pull Request Updated事件的字段问题,我来给你梳理清楚~
TFS Webhooks 请求格式与Pull Request Updated事件详情
一、通用请求格式基础
TFS Webhook的请求都是JSON格式,默认用POST方法发送。请求头里会带X-TFS-Event字段标识事件类型,比如你用到的pullrequest.updated就是Pull Request更新事件的标识。
二、可用于反序列化的类结构(核心字段)
结合Pull Request Updated事件的常见 payload,我整理了一套C#类结构(你可以根据自己的开发语言调整),覆盖了大部分核心字段:
public class PullRequestUpdatedPayload { // 事件元数据 public string EventType { get; set; } public DateTime EventTime { get; set; } public Resource Resource { get; set; } public ResourceContainers ResourceContainers { get; set; } } public class Resource { // Pull Request核心属性 public int PullRequestId { get; set; } public string Title { get; set; } public string Description { get; set; } public string Status { get; set; } // 可选值:active、completed、abandoned等 public DateTime CreatedDate { get; set; } public DateTime UpdatedDate { get; set; } public string SourceRefName { get; set; } // 源分支,如"refs/heads/feature/login-fix" public string TargetRefName { get; set; } // 目标分支,如"refs/heads/main" // 发起者信息 public Identity CreatedBy { get; set; } // 评审者列表 public List<Identity> Reviewers { get; set; } // 合并状态 public MergeStatus MergeStatus { get; set; } } public class Identity { public string DisplayName { get; set; } public string UniqueName { get; set; } public string Url { get; set; } } public class MergeStatus { public string Status { get; set; } // 可选值:succeeded、failed等 public string Message { get; set; } } public class ResourceContainers { // 所属项目信息 public Project Project { get; set; } // 关联仓库信息 public Repository Repository { get; set; } } public class Project { public string Id { get; set; } public string Name { get; set; } public string Url { get; set; } } public class Repository { public string Id { get; set; } public string Name { get; set; } public string Url { get; set; } }
三、实际请求JSON示例
下面是一段简化后的Pull Request Updated事件payload,帮你直观理解字段内容:
{ "EventType": "pullrequest.updated", "EventTime": "2024-05-20T14:30:00Z", "Resource": { "PullRequestId": 123, "Title": "修复用户密码重置流程", "Description": "解决用户无法接收重置邮件的问题", "Status": "active", "CreatedDate": "2024-05-18T09:15:00Z", "UpdatedDate": "2024-05-20T14:29:00Z", "SourceRefName": "refs/heads/fix/password-reset", "TargetRefName": "refs/heads/main", "CreatedBy": { "DisplayName": "张三", "UniqueName": "zhangsan@company.com", "Url": "https://dev.azure.com/company/_apis/Identities/12345" }, "Reviewers": [ { "DisplayName": "李四", "UniqueName": "lisi@company.com", "Url": "https://dev.azure.com/company/_apis/Identities/67890" } ], "MergeStatus": { "Status": "succeeded", "Message": "可以正常合并" } }, "ResourceContainers": { "Project": { "Id": "a1b2c3d4-5678-90ef-ghij-klmnopqrstuv", "Name": "用户管理系统", "Url": "https://dev.azure.com/company/用户管理系统/_apis/projects/a1b2c3d4-5678-90ef-ghij-klmnopqrstuv" }, "Repository": { "Id": "wxyz-1234-5678-abcd-efghijklmnop", "Name": "user-service", "Url": "https://dev.azure.com/company/用户管理系统/_apis/git/repositories/wxyz-1234-5678-abcd-efghijklmnop" } } }
四、获取完整字段的小技巧
- 临时搭一个简单的接收端点(比如用Ngrok+本地API),手动触发一次Pull Request更新事件,直接捕获真实的请求payload,这样能拿到所有实际存在的字段,避免遗漏。
- TFS的Webhook事件结构和Azure DevOps REST API的响应结构一致,你可以参考Pull Request相关的API定义来补充类的字段。
内容的提问来源于stack exchange,提问作者GodsCrimeScene
相关产品推荐
相关产品推荐

