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)
{