Change RoutePattern to not throw when inline and arg default value are the same (#747)

This commit is contained in:
James Newton-King 2018-08-23 21:39:23 +12:00 committed by GitHub
parent a0aa61fd10
commit 15e46ad323
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 3 deletions

View File

@ -343,7 +343,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns
if (updatedDefaults.TryGetValue(parameter.Name, out var newDefault))
{
if (parameter.Default != null)
if (parameter.Default != null && !Equals(newDefault, parameter.Default))
{
var message = Resources.FormatTemplateRoute_CannotHaveDefaultValueSpecifiedInlineAndExplicitly(parameter.Name);
throw new InvalidOperationException(message);
@ -360,7 +360,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns
if (parameter.Default != null)
{
updatedDefaults.Add(parameter.Name, parameter.Default);
updatedDefaults[parameter.Name] = parameter.Default;
}
if (!updatedParameterPolicies.TryGetValue(parameter.Name, out var parameterConstraints) &&

View File

@ -66,7 +66,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns
}
[Fact]
public void Pattern_DuplicateDefaultValue_Throws()
public void Pattern_DifferentDuplicateDefaultValue_Throws()
{
// Arrange
var template = "{a=13}/{b}/{c}";
@ -90,6 +90,29 @@ namespace Microsoft.AspNetCore.Routing.Patterns
ex.Message);
}
[Fact]
public void Pattern_SameDuplicateDefaultValue()
{
// Arrange
var template = "{a=13}/{b}/{c}";
var defaults = new { a = "13", };
var constraints = new { };
var original = RoutePatternFactory.Parse(template);
// Act
var actual = RoutePatternFactory.Pattern(
original.RawText,
defaults,
constraints,
original.PathSegments);
// Assert
Assert.Collection(
actual.Defaults,
kvp => { Assert.Equal("a", kvp.Key); Assert.Equal("13", kvp.Value); });
}
[Fact]
public void Pattern_OptionalParameterDefaultValue_Throws()
{