ASP.NET WebHooks işleyicileriASP.NET WebHooks handlers

WebHooks istekleri bir WebHook alıcısı tarafından doğrulandıktan sonra, kullanıcı kodu yla işlenmeye hazırdır.Once WebHooks requests has been validated by a WebHook receiver, it is ready to be processed by user code. Burası işleyicilerin devreye girildiği yer.This is where handlers come in. İşleyiciler IWebHookHandler arabiriminden türeyen ancak genellikle doğrudan arabirimden türeyen webhookhandler sınıfını kullanır.Handlers derive from the IWebHookHandler interface but typically uses the WebHookHandler class instead of deriving directly from the interface.

Bir WebHook isteği bir veya daha fazla işleyici tarafından işlenebilir.A WebHook request can be processed by one or more handlers. İşleyiciler, Sipariş'in basit bir tamsayı olduğu (1 ile 100 arasında olması önerilen) en düşükten en yükseğe giden kendi Sipariş özelliğine göre sırayla çağrılır:Handlers are called in order based on their respective Order property going from lowest to highest where Order is a simple integer (suggested to be between 1 and 100):

WebHook İşleyici Sipariş Özellik Diyagramı

İşleyici isteğe bağlı olarak WebHookHandlerContext'da Yanıt özelliğini ayarlayabilir ve bu özellik işlemenin durmasına ve yanıtın WebHook'a HTTP yanıtı olarak geri gönderilmesine yol açar.A handler can optionally set the Response property on the WebHookHandlerContext which will lead the processing to stop and the response to be sent back as the HTTP response to the WebHook. Yukarıdaki durumda, B ve B'den daha yüksek bir sıraya sahip olduğu için İşleyici C çağrılmaz.In the case above, Handler C won't get called because it has a higher order than B and B sets the response.

Yanıtı ayarlamak genellikle yalnızca yanıtın bilgileri kaynağı API'ye geri taşıyabileceği WebHook'lar için alakalıdır.Setting the response is typically only relevant for WebHooks where the response can carry information back to the originating API. Bu, örneğin Yanıtın WebHook'un geldiği kanala geri nakledildiği Slack WebHooks'taki durumdur.This is for example the case with Slack WebHooks where the response is posted back to the channel where the WebHook came from. İşleyiciler, yalnızca belirli bir alıcıdan WebHooks almak istiyorlarsa Alıcı özelliğini ayarlayabilir.Handlers can set the Receiver property if they only want to receive WebHooks from that particular receiver. Alıcıyı ayarlamazlarsa hepsi için çağrılır.If they don't set the receiver they are called for all of them.

Yanıtın diğer yaygın kullanımlarından biri, WebHook'un artık etkin olmadığını ve başka istek gönderilmemesi gerektiğini belirtmek için 410 Gone yanıtı kullanmaktır.One other common use of a response is to use a 410 Gone response to indicate that the WebHook no longer is active and no further requests should be submitted.

Varsayılan olarak bir işleyici tüm WebHook alıcıları tarafından çağrılır.By default a handler will be called by all WebHook receivers. Ancak, Alıcı özelliği işleyicinin adına ayarlanmışsa, bu işleyici yalnızca bu alıcıdan WebHook istekleri alır.However, if the Receiver property is set to the name of a handler then that handler will only receive WebHook requests from that receiver.

WebHook'u IşlemeProcessing a WebHook

Bir işleyici çağrıldığında, WebHook isteği hakkında bilgi içeren bir WebHookHandlerContext alır.When a handler is called, it gets a WebHookHandlerContext containing information about the WebHook request. Veriler, genellikle HTTP istek gövdesi, Veri özelliğinden kullanılabilir.The data, typically the HTTP request body, is available from the Data property.

Verilerin türü genellikle JSON veya HTML form verileridir, ancak istenirse daha belirli bir türe döküm yapmak mümkündür.The type of the data is typically JSON or HTML form data, but it is possible to cast to a more specific type if desired. Örneğin, ASP.NET WebHooks tarafından oluşturulan özel WebHooks aşağıdaki gibi Tür CustomBildirimler döküm olabilir:For example, the custom WebHooks generated by ASP.NET WebHooks can be cast to the type CustomNotifications as follows:

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);
    }
}

Sıralı İşlemQueued Processing

Yanıt birkaç saniye içinde oluşturulmazsa, çoğu WebHook gönderen kişi bir WebHook'u yeniden gönderir.Most WebHook senders will resend a WebHook if a response is not generated within a handful of seconds. Bu, işleyicinizin yeniden çağrılmaması için işlemi bu zaman dilimi içinde tamamlaması gerektiği anlamına gelir.This means that your handler must complete the processing within that time frame in order not for it to be called again.

İşlem daha uzun sürerse veya ayrı olarak daha iyi işlenirse, WebHookQueueHandler WebHook isteğini sıraya (örneğin Azure Depolama Kuyruğu)göndermek için kullanılabilir.If the processing takes longer, or is better handled separately then the WebHookQueueHandler can be used to submit the WebHook request to a queue, for example Azure Storage Queue.

WebHookQueueHandler uygulamasının anahattı burada verilmiştir:An outline of a WebHookQueueHandler implementation is provided here:

public class QueueHandler : WebHookQueueHandler
{
    public override Task EnqueueAsync(WebHookQueueContext context)
    {

        // Enqueue WebHookQueueContext to your queuing system of choice

        return Task.FromResult(true);
    }
}