private IReadOnlyList <IActionConstraint>?ExtractActionConstraints(List <ActionConstraintItem> items) { var count = 0; for (var i = 0; i < items.Count; i++) { if (items[i].Constraint != null) { count++; } } if (count == 0) { return(null); } var actionConstraints = new IActionConstraint[count]; var actionConstraintIndex = 0; for (var i = 0; i < items.Count; i++) { var actionConstraint = items[i].Constraint; if (actionConstraint != null) { actionConstraints[actionConstraintIndex++] = actionConstraint; } } return(actionConstraints); }
#pragma warning disable CS8632 // The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. static IReadOnlyList <IActionConstraint>?ExtractActionConstraints(List <ActionConstraintItem> items) #pragma warning restore CS8632 // The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. { var count = 0; for (var i = 0; i < items.Count; i++) { if (items[i].Constraint != null) { count++; } } if (count == 0) { return(null); } var actionConstraints = new IActionConstraint[count]; var actionConstraintIndex = 0; for (var i = 0; i < items.Count; i++) { var actionConstraint = items[i].Constraint; if (actionConstraint != null) { actionConstraints[actionConstraintIndex++] = actionConstraint; } } return(actionConstraints); }
public static void ConstraintMismatch( this ILogger logger, string actionName, string actionId, IActionConstraint actionConstraint) { _constraintMismatch(logger, actionName, actionId, actionConstraint, null); }
public static void ConstraintMismatch( this ILogger logger, string actionName, string actionId, IActionConstraint actionConstraint) { _constraintMismatch(logger, actionName, actionId, actionConstraint, null); }
protected virtual ActionConstraintContext GetContext(IActionConstraint constraint) { return(new ActionConstraintContext { CurrentCandidate = new ActionSelectorCandidate(new ActionDescriptor(), new[] { constraint }), RouteContext = new RouteContext(new DefaultHttpContext()), }); }
protected override ActionConstraintContext GetContext(IActionConstraint constraint) { var context = base.GetContext(constraint); // Constraint throws if receiver name is not present in the request. context.RouteContext.RouteData.Values.Add(WebHookConstants.ReceiverKeyName, "ping"); return(context); }
protected override ActionConstraintContext GetContext(IActionConstraint constraint) { var context = base.GetContext(constraint); var request = context.RouteContext.HttpContext.Request; request.Headers.Add("header", "header value"); request.QueryString = request.QueryString.Add("query", "query string value"); return(context); }
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); }
protected virtual ActionConstraintContext GetContext(IActionConstraint constraint) { var candidate = new ActionSelectorCandidate(new ActionDescriptor(), new[] { constraint }); var context = new ActionConstraintContext { Candidates = new[] { candidate }, CurrentCandidate = candidate, RouteContext = new RouteContext(new DefaultHttpContext()), }; return(context); }
public static void ConstraintMismatch( this ILogger logger, string actionName, string actionId, IActionConstraint actionConstraint) { LoggerMessage.Define <string, string, IActionConstraint>( LogLevel.Debug, 2, "Action '{ActionName}' with id '{ActionId}' did not match the constraint '{ActionConstraint}'") (logger, actionName, actionId, actionConstraint, null); }
public VersionRoute(string template, string versionRange) : base(template) { var constraint = CreateVersionConstraint(versionRange); if (constraint == null) { var message = string.Format("Invalid version format: {0}", versionRange); throw new ArgumentException(message, "versionRange"); } _constraint = constraint; }
public VersionRoute(string template, string versionRange) : base(template) { var constraint = CreateVersionConstraint(versionRange); if (constraint == null) { var message = string.Format("Invalid version format: {0}", versionRange); throw new ArgumentException(message, "versionRange"); } _constraint = constraint; }
private static ActionConstraintContext CreateActionConstraintContext(IActionConstraint constraint) { var context = new ActionConstraintContext(); var actionSelectorCandidate = new ActionSelectorCandidate(new ActionDescriptor(), new List <IActionConstraint> { constraint }); context.Candidates = new List <ActionSelectorCandidate> { actionSelectorCandidate }; context.CurrentCandidate = context.Candidates[0]; return(context); }
public IActionConstraint CreateInstance(IServiceProvider services) { _locker .LockIf ( () => { return (_constraint == null); } , () => { _constraint = OnActionConstraintFactoryProcessFunc(this); } ); return (_constraint); }
internal static void ConstraintMismatch(this ILogger logger, string actionName, string actionId, IActionConstraint actionConstraint) => constraintMismatch(logger, actionName, actionId, actionConstraint, null);
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; }
private IReadOnlyList <ActionSelectorCandidate> EvaluateActionConstraintsCore(RouteContext context, IReadOnlyList <ActionSelectorCandidate> candidates, int?startingOrder) { int?startingOrder1 = new int?(); int?nullable; for (int index1 = 0; index1 < candidates.Count; ++index1) { ActionSelectorCandidate candidate = candidates[index1]; if (candidate.Constraints != null) { for (int index2 = 0; index2 < candidate.Constraints.Count; ++index2) { IActionConstraint constraint = candidate.Constraints[index2]; if (startingOrder.HasValue) { int order = constraint.Order; nullable = startingOrder; int valueOrDefault = nullable.GetValueOrDefault(); if ((order > valueOrDefault ? (nullable.HasValue ? 1 : 0) : 0) == 0) { continue; } } if (startingOrder1.HasValue) { int order = constraint.Order; nullable = startingOrder1; int valueOrDefault = nullable.GetValueOrDefault(); if ((order < valueOrDefault ? (nullable.HasValue ? 1 : 0) : 0) == 0) { continue; } } startingOrder1 = new int?(constraint.Order); } } } if (!startingOrder1.HasValue) { return(candidates); } List <ActionSelectorCandidate> selectorCandidateList1 = new List <ActionSelectorCandidate>(); List <ActionSelectorCandidate> selectorCandidateList2 = new List <ActionSelectorCandidate>(); ActionConstraintContext context1 = new ActionConstraintContext(); context1.Candidates = candidates; context1.RouteContext = context; for (int index1 = 0; index1 < candidates.Count; ++index1) { ActionSelectorCandidate candidate = candidates[index1]; bool flag1 = true; bool flag2 = false; if (candidate.Constraints != null) { context1.CurrentCandidate = candidate; for (int index2 = 0; index2 < candidate.Constraints.Count; ++index2) { IActionConstraint constraint = candidate.Constraints[index2]; int order = constraint.Order; nullable = startingOrder1; int valueOrDefault = nullable.GetValueOrDefault(); if ((order == valueOrDefault ? (nullable.HasValue ? 1 : 0) : 0) != 0) { flag2 = true; if (!constraint.Accept(context1)) { flag1 = false; this._logger.LogDebug($"ConstraintMismatch( {candidate.Action.DisplayName}, {candidate.Action.Id}, {constraint}"); break; } } } } if (flag1 & flag2) { selectorCandidateList1.Add(candidate); } else if (flag1) { selectorCandidateList2.Add(candidate); } } if (selectorCandidateList1.Count > 0) { IReadOnlyList <ActionSelectorCandidate> actionConstraintsCore = this.EvaluateActionConstraintsCore(context, (IReadOnlyList <ActionSelectorCandidate>)selectorCandidateList1, startingOrder1); if (actionConstraintsCore != null && actionConstraintsCore.Count > 0) { return(actionConstraintsCore); } } if (selectorCandidateList2.Count == 0) { return((IReadOnlyList <ActionSelectorCandidate>)null); } return(this.EvaluateActionConstraintsCore(context, (IReadOnlyList <ActionSelectorCandidate>)selectorCandidateList2, startingOrder1)); }
public static partial void ConstraintMismatch(ILogger logger, string?actionName, string actionId, IActionConstraint actionConstraint);
public VersionedRoute(string template, int allowedVersion = 1) : base(template) { Order = -10; _constraint = new VersionConstraint(allowedVersion); }