通过


ASP.NET WebHook 概述

警告

ASP.NET WebHook 已弃用,不再接收更新或安全修补程序。

WebHook 是一种轻型 HTTP 模式,提供简单的发布/子模型,用于将 Web API 和 SaaS 服务连接在一起。 当服务中发生事件时,会以 HTTP POST 请求的形式向已注册的订阅者发送通知。 POST 请求包含有关事件的信息,使接收方能够采取相应措施。

由于简单起见,WebHook 已由大量服务公开,包括 DropboxGitHubBitbucketMailChimpPayPalSlackStripeTrello等。 例如,WebHook 可以指示文件已在 Dropbox 中更改, 或代码更改已在 GitHub 中提交,或者已在 PayPal 中启动付款,或者已在 Trello 中创建卡。 可能性是无休止的!

Microsoft ASP.NET WebHook 可以更轻松地在 ASP.NET 应用程序中发送和接收 WebHook:

  • 在接收端,它提供了一个通用模型,用于从多个 WebHook 提供程序接收和处理 WebHook。 它开箱即支持DropboxGitHubBitbucketMailChimpPayPalPusherSalesforceSlackStripeTrelloWordPressZendesk,并且很容易添加对更多服务的支持。

  • 在发送端,它支持管理和存储订阅,以及向正确的订阅集发送事件通知。 这使您能够定义您自己的事件集,以便订阅者可以订阅这些事件,并在事件发生时通知他们。

这两个部分可以一起使用或分开,具体取决于你的方案。 如果只需要从其他服务接收 WebHooks,则只需使用接收方部件;如果只想公开 WebHooks 供他人使用,则只需进行这个操作。

该代码面向 ASP.NET Web API 2 和 ASP.NET MVC 5,以 GitHub 上的OSS 形式提供。

WebHook 概述

WebHooks 是一种模式,这意味着它在不同的服务中使用时会有所不同,但基本思路相同。 可以将 WebHooks 视为一个简单的发布/订阅模型,用户可以在其中订阅在其他地方发生的事件。 事件通知作为 HTTP POST 请求传播,其中包含有关事件本身的信息。

通常,HTTP POST 请求包含由 WebHook 发送方确定的 JSON 对象或 HTML 表单数据,包括导致 WebHook 触发的事件的相关信息。 例如,来自 GitHub 的 WebHook POST 请求正文如下所示,因为特定存储库中打开了新问题:

{
  "action": "opened",
  "issue": {
      "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347",
      "number": 1347,
      ...
  },
  "repository": {
      "id": 1296269,
      "full_name": "octocat/Hello-World",
      "owner": {
          "login": "octocat",
          "id": 1
          ...
      },
      ...
  },
  "sender": {
      "login": "octocat",
      "id": 1,
      ...
  }
}

为了确保 WebHook 确实来自预期发送方,POST 请求以某种方式受到保护,然后由接收方验证。 例如,GitHub WebHooks包含X-Hub-Signature HTTP 标头,请求正文的哈希由接收方实现检查,因此无需担心。

WebHook 流通常如下所示:

  • WebHook 发送方公开客户端可以订阅的事件。 这些事件描述了对系统的可观察更改,例如插入了新的数据项、进程已完成或其他内容。

  • WebHook 接收器通过注册由四项内容组成的 WebHook 进行订阅:

    1. 应以 HTTP POST 请求的形式发布事件通知的 URI;

    2. 一组筛选器,用于详细描述应触发 WebHook 的特定事件。

    3. 用于对 HTTP POST 请求进行签名的密钥;

    4. 要包含在 HTTP POST 请求中的其他数据。 例如,这可以是 HTTP POST 请求正文中包含的其他 HTTP 标头字段或属性。

  • 事件发生后,将找到匹配的 WebHook 注册,并提交 HTTP POST 请求。 通常,如果收件人未响应或 HTTP POST 请求导致错误响应,则会多次重试 HTTP POST 请求的生成。

WebHooks 处理管道

用于传入 WebHook 的 Microsoft ASP.NET WebHook 处理管道如下所示:

ASP.NET WebHooks 处理管道

此处的两个关键概念是 接收方 和 处理程序:

  • 接收方 负责处理来自给定发件人的 WebHook 的特定风格,并强制实施安全检查,以确保 WebHook 请求确实来自预期发送方。

  • 用户代码通常在处理程序中运行以处理特定WebHook。

在以下节点中,这些概念将被更详细地描述。