diff --git a/src/Microsoft.AspNetCore.Routing/Template/RouteTemplate.cs b/src/Microsoft.AspNetCore.Routing/Template/RouteTemplate.cs index 3903d8bab0..d482f3a1b4 100644 --- a/src/Microsoft.AspNetCore.Routing/Template/RouteTemplate.cs +++ b/src/Microsoft.AspNetCore.Routing/Template/RouteTemplate.cs @@ -59,5 +59,24 @@ namespace Microsoft.AspNetCore.Routing.Template { return string.Join(SeparatorString, Segments.Select(s => s.DebuggerToString())); } + + /// + /// Gets the parameter matching the given name. + /// + /// The name of the parameter to match. + /// The matching parameter or null if no parameter matches the given name. + public TemplatePart GetParameter(string name) + { + for (var i = 0; i < Parameters.Count; i++) + { + var parameter = Parameters[i]; + if (string.Equals(parameter.Name, name, StringComparison.OrdinalIgnoreCase)) + { + return parameter; + } + } + + return null; + } } } diff --git a/src/Microsoft.AspNetCore.Routing/Tree/TreeRouter.cs b/src/Microsoft.AspNetCore.Routing/Tree/TreeRouter.cs index 451171c248..46544b2ee0 100644 --- a/src/Microsoft.AspNetCore.Routing/Tree/TreeRouter.cs +++ b/src/Microsoft.AspNetCore.Routing/Tree/TreeRouter.cs @@ -386,8 +386,7 @@ namespace Microsoft.AspNetCore.Routing.Tree { if (entry.RequiredLinkValues.ContainsKey(kvp.Key)) { - var parameter = entry.Template.Parameters - .FirstOrDefault(p => string.Equals(p.Name, kvp.Key, StringComparison.OrdinalIgnoreCase)); + var parameter = entry.Template.GetParameter(kvp.Key); if (parameter == null) {