Share via


ASP.NET WebHooks Receivers 介绍-WebHooks 让其变得便捷

[原文发表地址]:Introducing ASP.NET WebHooks Receivers - WebHooks made easy.

[原文发表时间]:2015-10-02

人们对ASP.NET近来的发展方向很感兴趣,ASP.NET Web Hooks Receivers general architecture

这是必然的。

 

尽管ASP.NET5很酷很令人振奋,它还是没有发布(在我发表这篇文章时,Beta 8版本正在设计)。ASP .NET 4.6 目前已经发布并准备上线, ASP .NET 4.6有很多令人振奋的新功能。现在我想探讨一下某些令人振奋的功能之一,尽管它正仍然在开发中,但作为一个预览,我可以和大家分享,这个新功能到底是什么呢,那就是ASP.NET WebHooks

你可以将Web Hooks看作是ASP.NET技术家族的另一个成员,就像Web Forms, MVC, SignalR, Web API它们都是ASP.NET内的组件。当你想用它时,它有连接功能。你不用的时候,它不占内存或运行。

什么是WEBHOOKS?

首先,然我们来看一下WebHooks是什么。WebHooks是一个协议。它们是HTTP回调技术。并且它们是“用户定义的HTTP回调”。你和 (或) 您的应用程序在有什么事情发生时会发送通知,然后您的 URL 端点在那件事情发生的时候就会 收到一封HTTP 邮件。WebHooks可以并且也应该被RESTful。那就意味着如果你有一个可用的的RESTful Web API然后给你的工程加WebHooks不仅仅是简单,它应该是意料中的完全的延伸。

那又怎样? 为此,我们为什么需要一个图书馆?

当然,从技术上讲你可以不这样做。你可以通过HttpHandler从理论上实现WebHooks模式,如果你觉得你要证明些什么的话。你可以用ASP.NET Web API更加合理的做它,整体的思路是,对做的事有一个明确和共有的方案会更容易和正确。

由于WebHooks是一个很通用的模式并且它正在被人们使用在像Dropbox, GitHub,MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello, 和 WordPress上,如果ASP.NET附带开放支持这些的权限会更好。并且它已经在做。包括支持接收上述所有的这些以及其他更多。

在为你的工程通过WebHooks发送事件的时候,需要简单的方法。为了做到这一点你需要管理和存储用户信息,并定时地回调到正确的用户设置。

ASP.NET WebHooks

ASP.NET WebHooks是开源的。WebHooks的开发工作正在GitHub上如火如荼地进行中。同时,为了 WebHooks可以应用于ASP.NET Web API 2 和ASP.NET MVC 5工程,开发人员对此也在紧锣密鼓地设计中。它帮助解决在处理WebHooks中所涉及的信息。几个星期前它已经在Microsoft WebDev blog(你应该订阅)上公布了。

虽然有一些写好的不错的文档,但是我认为最有吸引力的一些在下面这些例子里。

当你安装ASP.NET WebHooks后,有一个WebHook 接收器处理程序用来接收来自服务端的WebHook请求。例如用GitHub WebHooks,你可以轻松的创建一个新的项目然后把它发布到Azure站点。当GitHub WebHooks直接使用SSL作为它们的数据传输渠道时可能被阻塞,但是Azure网站使用*.azurewebsites.net站点可以免费获取SSL。这将使你第一次使用WebHook和检验更轻松。

在GitHub上有事件发生时,WebHooks尝试创建一个及时调用的启动器。例如,当有人在GitHub的问题上增加注解作为在创建GitHub bot中的第一步,你可能想得到通知。

你放在GitHub资源库的设置,以及SHA256 hash或一些其他大的私密,存放在默认路径/api/webhooks/incoming//api/webhooks/incoming/https://<host>/api/webhooks/incoming/<receiver>。在下面的例子中这些私密被放在一个叫做MS_WebHookReceiverSecret_GitHub的配置文件中。

publicclassGitHubHandler : WebHookHandler

{

publicoverrideTask ExecuteAsync(``stringreceiver, WebHookHandlerContext context)

{

stringaction = context.Actions.First();

JObject data = context.GetDataOrDefault<JObject>();

 

returnTask.FromResult(``true``);

}

}

在这个小例子里,当有人在一个问题上注解,"action"字符串内容就会包含"issues"(意思是它是来自"issues"源的事件)。

一旦你被WebHook回调触发,你可以决定如何处理。你可能想简单的回应,记录一些东西,或者开始一个更复杂的进程。通过这个新扩展你甚至可以触发一个Azure WebJob

更多WebHooks信息

发送WebHooks同样简单并且这里已经有一个很好关于怎样开始的介绍。最后Brady Gaster开发的一些嵌入到Visual Studio 2015的工具,让事情变得更容易。

What a lovely dialog box for making ASP.NET WebHooks even easier!

你可以去查阅ASP.NET Web Hooks,并且在 GitHub issues给我们您的反馈意见,或直接到HenrikBrady的推特上!