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); } }
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 }; } } }
/// <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); } }
public void OnProvidersExecuted(ActionConstraintProviderContext context) { }