private bool ParameterExistsInAnyRoute(ActionModel action, string parameterName) { foreach (var selector in ActionAttributeRouteModel.FlattenSelectors(action)) { if (selector.AttributeRouteModel == null) { continue; } var parsedTemplate = TemplateParser.Parse(selector.AttributeRouteModel.Template); if (parsedTemplate.GetParameter(parameterName) != null) { return(true); } } return(false); }
public static List <TResult> Flatten <TResult>( ApplicationModel application, Func <ApplicationModel, ControllerModel, ActionModel, SelectorModel, TResult> flattener) { var results = new List <TResult>(); var errors = new Dictionary <MethodInfo, IList <string> >(); var actionsByMethod = new Dictionary <MethodInfo, List <(ActionModel, SelectorModel)> >(); var actionsByRouteName = new Dictionary <string, List <(ActionModel, SelectorModel)> >(StringComparer.OrdinalIgnoreCase); var routeTemplateErrors = new List <string>(); foreach (var controller in application.Controllers) { foreach (var action in controller.Actions) { foreach (var selector in ActionAttributeRouteModel.FlattenSelectors(action)) { // PostProcess attribute routes so we can observe any errors. ReplaceAttributeRouteTokens(controller, action, selector, routeTemplateErrors); // Add to the data structures we use to find errors. AddActionToMethodInfoMap(actionsByMethod, action, selector); AddActionToRouteNameMap(actionsByRouteName, action, selector); var result = flattener(application, controller, action, selector); Debug.Assert(result != null); results.Add(result); } } } var attributeRoutingConfigurationErrors = new Dictionary <MethodInfo, string>(); foreach (var(method, actions) in actionsByMethod) { ValidateActionGroupConfiguration( method, actions, attributeRoutingConfigurationErrors); } if (attributeRoutingConfigurationErrors.Count > 0) { var message = CreateAttributeRoutingAggregateErrorMessage(attributeRoutingConfigurationErrors.Values); throw new InvalidOperationException(message); } var namedRoutedErrors = ValidateNamedAttributeRoutedActions(actionsByRouteName); if (namedRoutedErrors.Count > 0) { var message = CreateAttributeRoutingAggregateErrorMessage(namedRoutedErrors); throw new InvalidOperationException(message); } if (routeTemplateErrors.Count > 0) { var message = CreateAttributeRoutingAggregateErrorMessage(routeTemplateErrors); throw new InvalidOperationException(message); } return(results); }