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 '{HttpMethods.Join(", ")}' does not support the specified '{httpMethod}' method.");
}
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: " + Join(",", unmatchedVariables.ToArray());
return RouteResolutionResult.Error(this, errMsg);
}
return RouteResolutionResult.Success(this, uri);
}