private IReadOnlyList <IActionConstraint> GetConstraints(HttpContext httpContext, ActionDescriptor action)
        {
            if (action.ActionConstraints == null || action.ActionConstraints.Count == 0)
            {
                return(null);
            }

            var items   = action.ActionConstraints.Select(c => new ActionConstraintItem(c)).ToList();
            var context = new ActionConstraintProviderContext(httpContext, action, items);

            foreach (var provider in _actionConstraintProviders)
            {
                provider.OnProvidersExecuting(context);
            }

            for (var i = _actionConstraintProviders.Length - 1; i >= 0; i--)
            {
                _actionConstraintProviders[i].OnProvidersExecuted(context);
            }

            return
                (context.Results
                 .Where(item => item.Constraint != null)
                 .Select(item => item.Constraint)
                 .ToList());
        }
        /// <inheritdoc />
        public void OnProvidersExecuting(ActionConstraintProviderContext context)
        {
#if !NETCOREAPP2_1
            if (_mvcOptions.EnableEndpointRouting)
            {
                // If using endpoint routing then an endpoint selector policy is used to check feature action
                // constraints and this provider does not need to execute. Using the constraint provided by this
                // provider would work with endpoint routing but the endpoint selector policy allows us to make proper
                // asynchronous calls to the IFeatureManager.IsEnabledAsync rather than having to make synchronous calls
                // to it as in the FeatureActionConstraint (because the IActionConstraint.Accept method is synchronous).
                return;
            }
#endif

            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var factory = context.HttpContext.RequestServices.GetRequiredService <IFeatureActionConstraintFactory <TFeature> >();

            foreach (var item in context.Results)
            {
                ProvideConstraint(item, factory);
            }
        }
Exemple #3
0
        private IReadOnlyList <IActionConstraint> GetConstraints(HttpContext httpContext, ActionDescriptor action)
        {
            if (action.ActionConstraints == null || action.ActionConstraints.Count == 0)
            {
                return(null);
            }

            var items = new List <ActionConstraintItem>(action.ActionConstraints.Count);

            for (var i = 0; i < action.ActionConstraints.Count; i++)
            {
                items.Add(new ActionConstraintItem(action.ActionConstraints[i]));
            }

            var context = new ActionConstraintProviderContext(httpContext, action, items);

            for (var i = 0; i < _actionConstraintProviders.Length; i++)
            {
                _actionConstraintProviders[i].OnProvidersExecuting(context);
            }

            for (var i = _actionConstraintProviders.Length - 1; i >= 0; i--)
            {
                _actionConstraintProviders[i].OnProvidersExecuted(context);
            }

            var count = 0;

            for (var i = 0; i < context.Results.Count; i++)
            {
                if (context.Results[i].Constraint != null)
                {
                    count++;
                }
            }

            if (count == 0)
            {
                return(null);
            }

            var results = new IActionConstraint[count];

            for (int i = 0, j = 0; i < context.Results.Count; i++)
            {
                var constraint = context.Results[i].Constraint;
                if (constraint != null)
                {
                    results[j++] = constraint;
                }
            }

            return(results);
        }
 public void OnProvidersExecuting(ActionConstraintProviderContext context)
 {
     foreach (var item in context.Results)
     {
         if (item.Metadata is BooleanConstraintMarker marker)
         {
             Assert.Null(item.Constraint);
             item.Constraint = new BooleanConstraint() { Pass = marker.Pass };
         }
     }
 }
Exemple #5
0
    /// <inheritdoc />
    public void OnProvidersExecuting(ActionConstraintProviderContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }

        for (var i = 0; i < context.Results.Count; i++)
        {
            ProvideConstraint(context.Results[i], context.HttpContext.RequestServices);
        }
    }
    private void ExecuteProviders(HttpContext httpContext, ActionDescriptor action, List <ActionConstraintItem> items)
    {
        var context = new ActionConstraintProviderContext(httpContext, action, items);

        for (var i = 0; i < _actionConstraintProviders.Length; i++)
        {
            _actionConstraintProviders[i].OnProvidersExecuting(context);
        }

        for (var i = _actionConstraintProviders.Length - 1; i >= 0; i--)
        {
            _actionConstraintProviders[i].OnProvidersExecuted(context);
        }
    }
Exemple #7
0
 public void OnProvidersExecuted(ActionConstraintProviderContext context)
 {
 }