警告
ASP.NET WebHook 已弃用,不再接收更新或安全修补程序。
WebHook 是一种轻型 HTTP 模式,提供简单的发布/子模型,用于将 Web API 和 SaaS 服务连接在一起。 当服务中发生事件时,会以 HTTP POST 请求的形式向已注册的订阅者发送通知。 POST 请求包含有关事件的信息,使接收方能够采取相应措施。
由于简单起见,WebHook 已由大量服务公开,包括 Dropbox、GitHubBitbucket、MailChimp、PayPal、Slack、 Stripe、Trello等。 例如,WebHook 可以指示文件已在 Dropbox 中更改, 或代码更改已在 GitHub 中提交,或者已在 PayPal 中启动付款,或者已在 Trello 中创建卡。 可能性是无休止的!
Microsoft ASP.NET WebHook 可以更轻松地在 ASP.NET 应用程序中发送和接收 WebHook:
在接收端,它提供了一个通用模型,用于从多个 WebHook 提供程序接收和处理 WebHook。 它开箱即支持Dropbox;GitHub;Bitbucket;MailChimp;PayPal;Pusher;Salesforce;Slack;Stripe;Trello;WordPress和Zendesk,并且很容易添加对更多服务的支持。
在发送端,它支持管理和存储订阅,以及向正确的订阅集发送事件通知。 这使您能够定义您自己的事件集,以便订阅者可以订阅这些事件,并在事件发生时通知他们。
这两个部分可以一起使用或分开,具体取决于你的方案。 如果只需要从其他服务接收 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 进行订阅:
应以 HTTP POST 请求的形式发布事件通知的 URI;
一组筛选器,用于详细描述应触发 WebHook 的特定事件。
用于对 HTTP POST 请求进行签名的密钥;
要包含在 HTTP POST 请求中的其他数据。 例如,这可以是 HTTP POST 请求正文中包含的其他 HTTP 标头字段或属性。
事件发生后,将找到匹配的 WebHook 注册,并提交 HTTP POST 请求。 通常,如果收件人未响应或 HTTP POST 请求导致错误响应,则会多次重试 HTTP POST 请求的生成。
WebHooks 处理管道
用于传入 WebHook 的 Microsoft ASP.NET WebHook 处理管道如下所示:
此处的两个关键概念是 接收方 和 处理程序:
接收方 负责处理来自给定发件人的 WebHook 的特定风格,并强制实施安全检查,以确保 WebHook 请求确实来自预期发送方。
用户代码通常在处理程序中运行以处理特定WebHook。
在以下节点中,这些概念将被更详细地描述。