You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

消费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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:15:33