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

This commit is contained in:
dotnet-maestro-bot 2018-08-23 04:17:14 -07:00 committed by James Newton-King
parent 61c5f2bad4
commit 90d8f96b3f
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 (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); var message = Resources.FormatTemplateRoute_CannotHaveDefaultValueSpecifiedInlineAndExplicitly(parameter.Name);
throw new InvalidOperationException(message); throw new InvalidOperationException(message);
@ -360,7 +360,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns
if (parameter.Default != null) if (parameter.Default != null)
{ {
updatedDefaults.Add(parameter.Name, parameter.Default); updatedDefaults[parameter.Name] = parameter.Default;
} }
if (!updatedParameterPolicies.TryGetValue(parameter.Name, out var parameterConstraints) && if (!updatedParameterPolicies.TryGetValue(parameter.Name, out var parameterConstraints) &&

View File

@ -66,7 +66,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns
} }
[Fact] [Fact]
public void Pattern_DuplicateDefaultValue_Throws() public void Pattern_DifferentDuplicateDefaultValue_Throws()
{ {
// Arrange // Arrange
var template = "{a=13}/{b}/{c}"; var template = "{a=13}/{b}/{c}";
@ -90,6 +90,29 @@ namespace Microsoft.AspNetCore.Routing.Patterns
ex.Message); 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] [Fact]
public void Pattern_OptionalParameterDefaultValue_Throws() public void Pattern_OptionalParameterDefaultValue_Throws()
{ {