ASP.NET 웹후크 처리기ASP.NET WebHooks handlers

WebHooks 요청이 WebHook 수신기에 의해 검증되면 사용자 코드에서 처리할 준비가 된 것입니다.Once WebHooks requests has been validated by a WebHook receiver, it is ready to be processed by user code. 여기서 처리기가 들어옵니다.This is where handlers come in. 처리기는 IWebHookHandler 인터페이스에서 파생되지만 일반적으로 인터페이스에서 직접 파생되는 대신 WebHookHandler 클래스를 사용합니다.Handlers derive from the IWebHookHandler interface but typically uses the WebHookHandler class instead of deriving directly from the interface.

하나 이상의 처리기에서 WebHook 요청을 처리할 수 있습니다.A WebHook request can be processed by one or more handlers. 처리기는 Order가 간단한 정수인 가장 낮은 값에서 가장 높은 순서로 호출됩니다(1에서 100 사이로 제안됨).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 처리기 주문 속성 다이어그램

처리기는 선택적으로 WebHookHandlerContext에서 응답 속성을 설정할 수 있으며, 이 속성은 처리를 중지하고 응답이 WebHook에 대한 HTTP 응답으로 다시 전송하도록 유도합니다.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. 위의 경우 처리기 C는 B보다 높은 순서를 가지며 B는 응답을 설정하기 때문에 호출되지 않습니다.In the case above, Handler C won't get called because it has a higher order than B and B sets the response.

응답 설정은 일반적으로 응답이 정보를 원래 API로 다시 전달할 수 있는 WebHooks에만 관련이 있습니다.Setting the response is typically only relevant for WebHooks where the response can carry information back to the originating API. 예를 들어 Slack WebHooks의 경우 응답이 WebHook에서 발생한 채널에 다시 게시됩니다.This is for example the case with Slack WebHooks where the response is posted back to the channel where the WebHook came from. 처리기는 특정 수신기에서 WebHook만 수신하려는 경우 Receiver 속성을 설정할 수 있습니다.Handlers can set the Receiver property if they only want to receive WebHooks from that particular receiver. 수신기를 설정하지 않으면 모든 수신기가 호출됩니다.If they don't set the receiver they are called for all of them.

응답의 또 다른 일반적인 용도는 410 Gone 응답을 사용하여 WebHook이 더 이상 활성화되지 않고 더 이상 요청을 제출하지 않아야 함을 나타내는 것입니다.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.

기본적으로 처리기는 모든 WebHook 수신기에서 호출됩니다.By default a handler will be called by all WebHook receivers. 그러나 Receiver 속성이 처리기의 이름으로 설정된 경우 해당 처리기는 해당 수신기에서 WebHook 요청만 수신합니다.However, if the Receiver property is set to the name of a handler then that handler will only receive WebHook requests from that receiver.

웹 후크 처리Processing a WebHook

처리기가 호출되면 WebHook 요청에 대한 정보가 포함된 WebHookHandlerContext가 나타납니다.When a handler is called, it gets a WebHookHandlerContext containing information about the WebHook request. 일반적으로 HTTP 요청 본문인 데이터는 Data 속성에서 사용할 수 있습니다.The data, typically the HTTP request body, is available from the Data property.

데이터의 형식은 일반적으로 JSON 또는 HTML 양식 데이터이지만 원하는 경우 보다 구체적인 형식으로 캐스팅할 수 있습니다.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. 예를 들어 ASP.NET WebHook에서 생성된 사용자 지정 WebHooks는 다음과 같이 사용자 지정 알림 유형으로 캐스팅할 수 있습니다.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);
    }
}

큐에 대기된 처리Queued Processing

응답이 몇 초 내에 생성되지 않으면 대부분의 WebHook 발신자는 WebHook을 다시 보냅니다.Most WebHook senders will resend a WebHook if a response is not generated within a handful of seconds. 즉, 처리기가 다시 호출되지 않도록 해당 기간 내에 처리를 완료해야 합니다.This means that your handler must complete the processing within that time frame in order not for it to be called again.

처리 시간이 더 오래 걸리거나 별도로 더 잘 처리되는 경우 WebHookQueueHandler를 사용하여 WebHook 요청을 큐에 제출하는 데 사용할 수 있습니다(예: Azure 저장소 큐)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 구현의 개요는 다음과 같습니다.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);
    }
}