diff --git a/src/Microsoft.AspNet.Routing/Template/RouteTemplate.cs b/src/Microsoft.AspNet.Routing/Template/RouteTemplate.cs index 44e46576..813103f6 100644 --- a/src/Microsoft.AspNet.Routing/Template/RouteTemplate.cs +++ b/src/Microsoft.AspNet.Routing/Template/RouteTemplate.cs @@ -13,13 +13,15 @@ public class RouteTemplate { private const string SeparatorString = "/"; - public RouteTemplate(List segments) + public RouteTemplate(string template, List segments) { if (segments == null) { throw new ArgumentNullException(nameof(segments)); } + Template = template; + Segments = segments; Parameters = new List(); @@ -37,9 +39,11 @@ public RouteTemplate(List segments) } } - public IList Parameters { get; private set; } + public string Template { get; } + + public IList Parameters { get; } - public IList Segments { get; private set; } + public IList Segments { get; } public TemplateSegment GetSegment(int index) { diff --git a/src/Microsoft.AspNet.Routing/Template/TemplateParser.cs b/src/Microsoft.AspNet.Routing/Template/TemplateParser.cs index 501298b4..c463c954 100644 --- a/src/Microsoft.AspNet.Routing/Template/TemplateParser.cs +++ b/src/Microsoft.AspNet.Routing/Template/TemplateParser.cs @@ -53,7 +53,7 @@ public static RouteTemplate Parse(string routeTemplate) if (IsAllValid(context, segments)) { - return new RouteTemplate(segments); + return new RouteTemplate(routeTemplate, segments); } else { diff --git a/test/Microsoft.AspNet.Routing.Tests/Template/TemplateParserTests.cs b/test/Microsoft.AspNet.Routing.Tests/Template/TemplateParserTests.cs index beec5ffc..5e466e9f 100644 --- a/test/Microsoft.AspNet.Routing.Tests/Template/TemplateParserTests.cs +++ b/test/Microsoft.AspNet.Routing.Tests/Template/TemplateParserTests.cs @@ -21,7 +21,7 @@ public void Parse_SingleLiteral() // Arrange var template = "cool"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateLiteral("cool")); @@ -38,7 +38,7 @@ public void Parse_SingleParameter() // Arrange var template = "{p}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add( TemplatePart.CreateParameter("p", false, false, defaultValue: null, inlineConstraints: null)); @@ -57,7 +57,7 @@ public void Parse_OptionalParameter() // Arrange var template = "{p?}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add( TemplatePart.CreateParameter("p", false, true, defaultValue: null, inlineConstraints: null)); @@ -76,7 +76,7 @@ public void Parse_MultipleLiterals() // Arrange var template = "cool/awesome/super"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateLiteral("cool")); expected.Segments.Add(new TemplateSegment()); @@ -97,7 +97,7 @@ public void Parse_MultipleParameters() // Arrange var template = "{p1}/{p2}/{*p3}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p1", @@ -136,7 +136,7 @@ public void Parse_ComplexSegment_LP() // Arrange var template = "cool-{p1}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateLiteral("cool-")); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p1", @@ -159,7 +159,7 @@ public void Parse_ComplexSegment_PL() // Arrange var template = "{p1}-cool"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p1", false, @@ -182,7 +182,7 @@ public void Parse_ComplexSegment_PLP() // Arrange var template = "{p1}-cool-{p2}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p1", false, @@ -211,7 +211,7 @@ public void Parse_ComplexSegment_LPL() // Arrange var template = "cool-{p1}-awesome"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateLiteral("cool-")); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p1", @@ -235,7 +235,7 @@ public void Parse_ComplexSegment_OptionalParameterFollowingPeriod() // Arrange var template = "{p1}.{p2?}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p1", false, @@ -265,7 +265,7 @@ public void Parse_ComplexSegment_ParametersFollowingPeriod() // Arrange var template = "{p1}.{p2}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p1", false, @@ -295,7 +295,7 @@ public void Parse_ComplexSegment_OptionalParameterFollowingPeriod_ThreeParameter // Arrange var template = "{p1}.{p2}.{p3?}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p1", false, @@ -334,7 +334,7 @@ public void Parse_ComplexSegment_ThreeParametersSeperatedByPeriod() // Arrange var template = "{p1}.{p2}.{p3}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p1", false, @@ -373,7 +373,7 @@ public void Parse_ComplexSegment_OptionalParameterFollowingPeriod_MiddleSegment( // Arrange var template = "{p1}.{p2?}/{p3}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p1", false, @@ -409,7 +409,7 @@ public void Parse_ComplexSegment_OptionalParameterFollowingPeriod_LastSegment() // Arrange var template = "{p1}/{p2}.{p3?}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p1", false, @@ -446,7 +446,7 @@ public void Parse_ComplexSegment_OptionalParameterFollowingPeriod_PeriodAfterSla // Arrange var template = "{p2}/.{p3?}"; - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); expected.Segments[0].Parts.Add(TemplatePart.CreateParameter("p2", false, @@ -480,7 +480,7 @@ public void Parse_ComplexSegment_OptionalParameterFollowingPeriod_PeriodAfterSla public void Parse_RegularExpressions(string template, string constraint) { // Arrange - var expected = new RouteTemplate(new List()); + var expected = new RouteTemplate(template, new List()); expected.Segments.Add(new TemplateSegment()); var c = new InlineConstraint(constraint); expected.Segments[0].Parts.Add( @@ -830,6 +830,11 @@ public bool Equals(RouteTemplate x, RouteTemplate y) } else { + if (!string.Equals(x.Template, y.Template, StringComparison.Ordinal)) + { + return false; + } + if (x.Segments.Count != y.Segments.Count) { return false;