public RouteResolutionResult Apply(object request, string httpMethod) { if (!this.IsValid) { return(RouteResolutionResult.Error(this, this.ErrorMsg)); } if (HttpMethods != null && HttpMethods.Length != 0 && httpMethod != null && !HttpMethods.Contains(httpMethod) && !HttpMethods.Contains("ANY")) { return(RouteResolutionResult.Error(this, "Allowed HTTP methods '{0}' does not support the specified '{1}' method." .Fmt(HttpMethods.Join(", "), httpMethod))); } var uri = this.Path; var unmatchedVariables = new List <string>(); foreach (var variable in this.variablesMap) { var property = variable.Value; var value = property.GetValue(request); var isWildCard = variable.Key.EndsWith("*"); if (value == null && !isWildCard) { unmatchedVariables.Add(variable.Key); continue; } var variableValue = FormatVariable(value); uri = uri.Replace(VariablePrefix + variable.Key + VariablePostfix, variableValue); } if (unmatchedVariables.Any()) { var errMsg = "Could not match following variables: " + string.Join(",", unmatchedVariables.ToArray()); return(RouteResolutionResult.Error(this, errMsg)); } return(RouteResolutionResult.Success(this, uri)); }