This commit is contained in:
Ryan Nowak 2018-09-24 21:45:13 -07:00
parent 7c16c92317
commit 49c2317c14
2 changed files with 26 additions and 1 deletions

View File

@ -15,6 +15,11 @@ namespace Microsoft.AspNetCore.Routing.Internal
[DebuggerDisplay("{DebuggerDisplayString,nq}")] [DebuggerDisplay("{DebuggerDisplayString,nq}")]
public class LinkGenerationDecisionTree public class LinkGenerationDecisionTree
{ {
// Fallback value for cases where the ambient values weren't provided.
//
// This is safe because we don't mutate the route values in here.
private static readonly RouteValueDictionary EmptyAmbientValues = new RouteValueDictionary();
private readonly DecisionTreeNode<OutboundMatch> _root; private readonly DecisionTreeNode<OutboundMatch> _root;
public LinkGenerationDecisionTree(IReadOnlyList<OutboundMatch> entries) public LinkGenerationDecisionTree(IReadOnlyList<OutboundMatch> entries)
@ -30,7 +35,7 @@ namespace Microsoft.AspNetCore.Routing.Internal
if (_root.Matches.Count > 0 || _root.Criteria.Count > 0) if (_root.Matches.Count > 0 || _root.Criteria.Count > 0)
{ {
var results = new List<OutboundMatchResult>(); var results = new List<OutboundMatchResult>();
Walk(results, values, ambientValues, _root, isFallbackPath: false); Walk(results, values, ambientValues ?? EmptyAmbientValues, _root, isFallbackPath: false);
results.Sort(OutboundMatchResultComparer.Instance); results.Sort(OutboundMatchResultComparer.Instance);
return results; return results;
} }

View File

@ -14,6 +14,26 @@ namespace Microsoft.AspNetCore.Routing.Internal.Routing
{ {
public class LinkGenerationDecisionTreeTest public class LinkGenerationDecisionTreeTest
{ {
[Fact]
public void GetMatches_AllowsNullAmbientValues()
{
// Arrange
var entries = new List<OutboundMatch>();
var entry = CreateMatch(new { });
entries.Add(entry);
var tree = new LinkGenerationDecisionTree(entries);
var context = CreateContext(new { });
// Act
var matches = tree.GetMatches(context.Values, ambientValues: null);
// Assert
Assert.Same(entry, Assert.Single(matches).Match);
}
[Fact] [Fact]
public void SelectSingleEntry_NoCriteria() public void SelectSingleEntry_NoCriteria()
{ {