Beispiel #1
0
    /// <inheritdoc />
    public bool Accept(ActionConstraintContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }

        var pingRequestMetadata = _pingRequestMetadata;

        if (pingRequestMetadata == null && _metadataProvider != null)
        {
            if (!context.RouteContext.RouteData.TryGetWebHookReceiverName(
                    context.CurrentCandidate.Action,
                    out var receiverName))
            {
                var message = string.Format(
                    CultureInfo.CurrentCulture,
                    Resources.EventConstraints_NoReceiverName,
                    typeof(WebHookReceiverNameConstraint));
                throw new InvalidOperationException(message);
            }

            pingRequestMetadata = _metadataProvider.GetPingRequestMetadata(receiverName);
        }

        return(Accept(context, _eventName, pingRequestMetadata?.PingEventName));
    }
    /// <inheritdoc />
    public void OnResourceExecuting(ResourceExecutingContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }

        var routeData           = context.RouteData;
        var pingRequestMetadata = _pingRequestMetadata;

        if (pingRequestMetadata == null)
        {
            if (!routeData.TryGetWebHookReceiverName(out var requestReceiverName))
            {
                return;
            }

            pingRequestMetadata = _metadataProvider.GetPingRequestMetadata(requestReceiverName);
            if (pingRequestMetadata == null)
            {
                return;
            }
        }

        // If this is a ping request, short-circuit further processing.
        if (pingRequestMetadata != null &&
            routeData.TryGetWebHookEventName(out var eventName) &&
            string.Equals(eventName, pingRequestMetadata.PingEventName, StringComparison.OrdinalIgnoreCase))
        {
            _logger.LogInformation(
                0,
                "Received a Ping Event for the '{ReceiverName}' WebHook receiver -- ignoring.",
                pingRequestMetadata.ReceiverName);

            context.Result = new OkResult();
        }
    }