Web Kancaları işleyicilerini ASP.NET
Web Kancaları istekleri bir Web Kancası alıcısı tarafından doğrulandıktan sonra, kullanıcı koduyla işlenmeye hazırdır. İşleyiciler burada devreye girer. İşleyiciler IWebHookHandler arabiriminden türetilir, ancak genellikle doğrudan arabirimden türetme yerine WebHookHandler sınıfını kullanır.
Web Kancası isteği bir veya daha fazla işleyici tarafından işlenebilir. İşleyiciler, Sıra özelliğinin en düşükten en yükseğe (1 ile 100 arasında olması önerilir) basit bir tamsayı olduğu sırasıyla çağrılır:
İşleyici isteğe bağlı olarak WebHookHandlerContext üzerinde Response özelliğini ayarlayabilir. Bu özellik işlemenin durmasına ve yanıtın Web Kancası'na HTTP yanıtı olarak geri gönderilmesine yol açar. Yukarıdaki durumda, C İşleyicisi çağrılmayacak çünkü B'den daha yüksek bir sıralamaya sahip ve B yanıtı ayarlar.
Yanıtın ayarlanması genellikle yalnızca yanıtın kaynak API'ye bilgi taşıyabileceği Web Kancaları için geçerlidir. Bu, örneğin yanıtın Web Kancası'nın geldiği kanala geri gönderildiği Slack WebHooks'ta durumdur. İşleyiciler, yalnızca söz konusu alıcıdan Web Kancaları almak istediklerinde Alıcı özelliğini ayarlayabilir. Alıcıyı ayarlamazlarsa, hepsi için çağrılır.
Yanıtın diğer yaygın kullanımlarından biri de Web Kancası'nın artık etkin olmadığını ve başka istek gönderilmemesi gerektiğini belirtmek için 410 Gone yanıtı kullanmaktır.
Varsayılan olarak, işleyici tüm Web Kancası alıcıları tarafından çağrılır. Ancak, Receiver özelliği bir işleyicinin adına ayarlanırsa, bu işleyici yalnızca bu alıcıdan Web Kancası isteklerini alır.
Web Kancasını İşleme
İşleyici çağrıldığında, WebHook isteği hakkında bilgi içeren bir WebHookHandlerContext alır. Genellikle HTTP isteği gövdesi olan veriler Data özelliğinden kullanılabilir.
Verilerin türü genellikle JSON veya HTML form verileridir, ancak isterseniz daha belirli bir türe yayın yapmak mümkündür. Örneğin, ASP.NET Web Kancaları tarafından oluşturulan özel Web Kancaları, CustomNotifications türüne aşağıdaki gibi yayınlanabilir:
public class MyWebHookHandler : WebHookHandler { public MyWebHookHandler() { this.Receiver = "custom"; } public override Task ExecuteAsync(string generator, WebHookHandlerContext context) { CustomNotifications notifications = context.GetDataOrDefault<CustomNotifications>(); foreach (var notification in notifications.Notifications) { ... } return Task.FromResult(true); } }
Kuyruğa Alınmış İşleme
Yanıt birkaç saniye içinde oluşturulmazsa Çoğu Web Kancası göndereni bir Web Kancasını yeniden gönderir. Bu, işleyicinizin yeniden çağrılmaması için işlemeyi bu zaman dilimi içinde tamamlaması gerektiği anlamına gelir.
WebHookQueueHandler uygulamasının ana hattı burada verilmiştir:
public class QueueHandler : WebHookQueueHandler { public override Task EnqueueAsync(WebHookQueueContext context) { // Enqueue WebHookQueueContext to your queuing system of choice return Task.FromResult(true); } }