public RegexRouteValidator(string parameter, string regex, RouteValidationAction passAction, RouteValidationAction failAction) { _parameter = parameter; _regex = new Regex("^" + regex + "$"); _passAction = passAction; _failAction = failAction; }
internal RouteResult Resolve(string url) { Match m = _regex.Match(url); if (m.Success) { RouteResult result = new RouteResult(Controller, Action, _parameters); foreach (string groupName in _regexGroups) { string value = m.Groups[groupName].Value; string searchString = "{" + groupName + "}"; bool found = false; if (result.Controller.Contains(searchString)) { result.Controller = result.Controller.Replace(searchString, value); found = true; } if (result.Action.Contains(searchString)) { result.Action = result.Action.Replace(searchString, value); found = true; } if (_parameterNames != null) { foreach (string paramName in _parameterNames) { string paramValue = result.Parameters[paramName]; if (paramValue.Contains(searchString)) { result.Parameters[paramName] = paramValue.Replace(searchString, value); found = true; } } } if (!found) { result.Parameters[groupName] = value; } if (_validators != null) { foreach (IRouteValidator validator in _validators) { if (validator.ShouldValidate(groupName)) { bool ok = validator.Validate(groupName, value); RouteValidationAction actionToExecute = ok ? validator.PassAction : validator.FailAction; switch (actionToExecute) { case RouteValidationAction.Skip: result.ValidationResult = RouteValidationResult.Skip; break; case RouteValidationAction.Error: result.ValidationResult = RouteValidationResult.Fail; break; case RouteValidationAction.Accept: result.ValidationResult = RouteValidationResult.Success; break; case RouteValidationAction.None: continue; } return(result); } } } } return(result); } return(null); }