React to RoutePattern changes in Routing
This commit is contained in:
parent
53930af0e3
commit
3ba6f35495
|
|
@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Mvc.Infrastructure;
|
||||||
using Microsoft.AspNetCore.Routing;
|
using Microsoft.AspNetCore.Routing;
|
||||||
using Microsoft.AspNetCore.Routing.EndpointConstraints;
|
using Microsoft.AspNetCore.Routing.EndpointConstraints;
|
||||||
using Microsoft.AspNetCore.Routing.Matchers;
|
using Microsoft.AspNetCore.Routing.Matchers;
|
||||||
|
using Microsoft.AspNetCore.Routing.Patterns;
|
||||||
using Microsoft.AspNetCore.Routing.Template;
|
using Microsoft.AspNetCore.Routing.Template;
|
||||||
using Microsoft.Extensions.Primitives;
|
using Microsoft.Extensions.Primitives;
|
||||||
|
|
||||||
|
|
@ -298,20 +299,18 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
return invoker.InvokeAsync();
|
return invoker.InvokeAsync();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var defaults = new RouteValueDictionary(nonInlineDefaults);
|
||||||
|
EnsureRequiredValuesInDefaults(action.RouteValues, defaults);
|
||||||
|
|
||||||
var metadataCollection = BuildEndpointMetadata(action, routeName, source);
|
var metadataCollection = BuildEndpointMetadata(action, routeName, source);
|
||||||
var endpoint = new MatcherEndpoint(
|
var endpoint = new MatcherEndpoint(
|
||||||
next => invokerDelegate,
|
next => invokerDelegate,
|
||||||
template,
|
RoutePatternFactory.Parse(template, defaults, constraints: null),
|
||||||
new RouteValueDictionary(nonInlineDefaults),
|
|
||||||
new RouteValueDictionary(action.RouteValues),
|
new RouteValueDictionary(action.RouteValues),
|
||||||
order,
|
order,
|
||||||
metadataCollection,
|
metadataCollection,
|
||||||
action.DisplayName);
|
action.DisplayName);
|
||||||
|
|
||||||
// Use defaults after the endpoint is created as it merges both the inline and
|
|
||||||
// non-inline defaults into one.
|
|
||||||
EnsureRequiredValuesInDefaults(endpoint.RequiredValues, endpoint.Defaults);
|
|
||||||
|
|
||||||
return endpoint;
|
return endpoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -373,7 +372,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
// Required values: controller=foo, action=bar
|
// Required values: controller=foo, action=bar
|
||||||
// Final constructed template: foo/bar/{category}/{id?}
|
// Final constructed template: foo/bar/{category}/{id?}
|
||||||
// Final defaults: controller=foo, action=bar, category=products
|
// Final defaults: controller=foo, action=bar, category=products
|
||||||
private void EnsureRequiredValuesInDefaults(RouteValueDictionary requiredValues, RouteValueDictionary defaults)
|
private void EnsureRequiredValuesInDefaults(IDictionary<string, string> requiredValues, RouteValueDictionary defaults)
|
||||||
{
|
{
|
||||||
foreach (var kvp in requiredValues)
|
foreach (var kvp in requiredValues)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||||
using Microsoft.AspNetCore.Routing;
|
using Microsoft.AspNetCore.Routing;
|
||||||
using Microsoft.AspNetCore.Routing.EndpointConstraints;
|
using Microsoft.AspNetCore.Routing.EndpointConstraints;
|
||||||
using Microsoft.AspNetCore.Routing.Matchers;
|
using Microsoft.AspNetCore.Routing.Matchers;
|
||||||
|
using Microsoft.AspNetCore.Routing.Patterns;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -297,12 +298,11 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
|
|
||||||
private MatcherEndpoint CreateEndpoint(params IEndpointConstraint[] constraints)
|
private MatcherEndpoint CreateEndpoint(params IEndpointConstraint[] constraints)
|
||||||
{
|
{
|
||||||
EndpointMetadataCollection endpointMetadata = new EndpointMetadataCollection(constraints);
|
var endpointMetadata = new EndpointMetadataCollection(constraints);
|
||||||
|
|
||||||
return new MatcherEndpoint(
|
return new MatcherEndpoint(
|
||||||
(r) => null,
|
(r) => null,
|
||||||
"",
|
RoutePatternFactory.Parse("/"),
|
||||||
new RouteValueDictionary(),
|
|
||||||
new RouteValueDictionary(),
|
new RouteValueDictionary(),
|
||||||
0,
|
0,
|
||||||
endpointMetadata,
|
endpointMetadata,
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
|
|
||||||
Assert.Equal(displayName, matcherEndpoint.DisplayName);
|
Assert.Equal(displayName, matcherEndpoint.DisplayName);
|
||||||
Assert.Equal(order, matcherEndpoint.Order);
|
Assert.Equal(order, matcherEndpoint.Order);
|
||||||
Assert.Equal(template, matcherEndpoint.Template);
|
Assert.Equal(template, matcherEndpoint.RoutePattern.RawText);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -197,7 +197,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var inspectors = finalEndpointTemplates
|
var inspectors = finalEndpointTemplates
|
||||||
.Select(t => new Action<Endpoint>(e => Assert.Equal(t, Assert.IsType<MatcherEndpoint>(e).Template)))
|
.Select(t => new Action<Endpoint>(e => Assert.Equal(t, Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText)))
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
@ -224,7 +224,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var inspectors = finalEndpointTemplates
|
var inspectors = finalEndpointTemplates
|
||||||
.Select(t => new Action<Endpoint>(e => Assert.Equal(t, Assert.IsType<MatcherEndpoint>(e).Template)))
|
.Select(t => new Action<Endpoint>(e => Assert.Equal(t, Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText)))
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
@ -248,8 +248,8 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Collection(endpoints,
|
Assert.Collection(endpoints,
|
||||||
(e) => Assert.Equal("TestController", Assert.IsType<MatcherEndpoint>(e).Template),
|
(e) => Assert.Equal("TestController", Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText),
|
||||||
(e) => Assert.Equal("TestController/TestAction", Assert.IsType<MatcherEndpoint>(e).Template));
|
(e) => Assert.Equal("TestController/TestAction", Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -276,8 +276,8 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Collection(endpoints1,
|
Assert.Collection(endpoints1,
|
||||||
(e) => Assert.Equal("TestController", Assert.IsType<MatcherEndpoint>(e).Template),
|
(e) => Assert.Equal("TestController", Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText),
|
||||||
(e) => Assert.Equal("TestController/TestAction", Assert.IsType<MatcherEndpoint>(e).Template));
|
(e) => Assert.Equal("TestController/TestAction", Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText));
|
||||||
Assert.Same(endpoints1, endpoints2);
|
Assert.Same(endpoints1, endpoints2);
|
||||||
|
|
||||||
actionDescriptorCollectionProviderMock.VerifyGet(m => m.ActionDescriptors, Times.Once);
|
actionDescriptorCollectionProviderMock.VerifyGet(m => m.ActionDescriptors, Times.Once);
|
||||||
|
|
@ -318,8 +318,8 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
var endpoints = dataSource.Endpoints;
|
var endpoints = dataSource.Endpoints;
|
||||||
|
|
||||||
Assert.Collection(endpoints,
|
Assert.Collection(endpoints,
|
||||||
(e) => Assert.Equal("TestController", Assert.IsType<MatcherEndpoint>(e).Template),
|
(e) => Assert.Equal("TestController", Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText),
|
||||||
(e) => Assert.Equal("TestController/TestAction", Assert.IsType<MatcherEndpoint>(e).Template));
|
(e) => Assert.Equal("TestController/TestAction", Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText));
|
||||||
|
|
||||||
actionDescriptorCollectionProviderMock
|
actionDescriptorCollectionProviderMock
|
||||||
.Setup(m => m.ActionDescriptors)
|
.Setup(m => m.ActionDescriptors)
|
||||||
|
|
@ -335,7 +335,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
|
|
||||||
Assert.NotSame(endpoints, newEndpoints);
|
Assert.NotSame(endpoints, newEndpoints);
|
||||||
Assert.Collection(newEndpoints,
|
Assert.Collection(newEndpoints,
|
||||||
(e) => Assert.Equal("NewTestController/NewTestAction", Assert.IsType<MatcherEndpoint>(e).Template));
|
(e) => Assert.Equal("NewTestController/NewTestAction", Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -357,8 +357,8 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Collection(endpoints,
|
Assert.Collection(endpoints,
|
||||||
(e) => Assert.Equal("TestController/TestAction1", Assert.IsType<MatcherEndpoint>(e).Template),
|
(e) => Assert.Equal("TestController/TestAction1", Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText),
|
||||||
(e) => Assert.Equal("TestController/TestAction2", Assert.IsType<MatcherEndpoint>(e).Template));
|
(e) => Assert.Equal("TestController/TestAction2", Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
|
|
@ -381,7 +381,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
var endpoints = dataSource.Endpoints;
|
var endpoints = dataSource.Endpoints;
|
||||||
|
|
||||||
var inspectors = finalEndpointTemplates
|
var inspectors = finalEndpointTemplates
|
||||||
.Select(t => new Action<Endpoint>(e => Assert.Equal(t, Assert.IsType<MatcherEndpoint>(e).Template)))
|
.Select(t => new Action<Endpoint>(e => Assert.Equal(t, Assert.IsType<MatcherEndpoint>(e).RoutePattern.RawText)))
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
@ -431,7 +431,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
var routeNameMetadata = matcherEndpoint.Metadata.GetMetadata<IRouteNameMetadata>();
|
var routeNameMetadata = matcherEndpoint.Metadata.GetMetadata<IRouteNameMetadata>();
|
||||||
Assert.NotNull(routeNameMetadata);
|
Assert.NotNull(routeNameMetadata);
|
||||||
Assert.Equal("namedRoute", routeNameMetadata.Name);
|
Assert.Equal("namedRoute", routeNameMetadata.Name);
|
||||||
Assert.Equal("named/Home/Index/{id?}", matcherEndpoint.Template);
|
Assert.Equal("named/Home/Index/{id?}", matcherEndpoint.RoutePattern.RawText);
|
||||||
},
|
},
|
||||||
(ep) =>
|
(ep) =>
|
||||||
{
|
{
|
||||||
|
|
@ -439,7 +439,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
var routeNameMetadata = matcherEndpoint.Metadata.GetMetadata<IRouteNameMetadata>();
|
var routeNameMetadata = matcherEndpoint.Metadata.GetMetadata<IRouteNameMetadata>();
|
||||||
Assert.NotNull(routeNameMetadata);
|
Assert.NotNull(routeNameMetadata);
|
||||||
Assert.Equal("namedRoute", routeNameMetadata.Name);
|
Assert.Equal("namedRoute", routeNameMetadata.Name);
|
||||||
Assert.Equal("named/Products/Details/{id?}", matcherEndpoint.Template);
|
Assert.Equal("named/Products/Details/{id?}", matcherEndpoint.RoutePattern.RawText);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -467,25 +467,25 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
(ep) =>
|
(ep) =>
|
||||||
{
|
{
|
||||||
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(ep);
|
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(ep);
|
||||||
Assert.Equal("Home/Index/{id?}", matcherEndpoint.Template);
|
Assert.Equal("Home/Index/{id?}", matcherEndpoint.RoutePattern.RawText);
|
||||||
Assert.Equal(1, matcherEndpoint.Order);
|
Assert.Equal(1, matcherEndpoint.Order);
|
||||||
},
|
},
|
||||||
(ep) =>
|
(ep) =>
|
||||||
{
|
{
|
||||||
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(ep);
|
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(ep);
|
||||||
Assert.Equal("named/Home/Index/{id?}", matcherEndpoint.Template);
|
Assert.Equal("named/Home/Index/{id?}", matcherEndpoint.RoutePattern.RawText);
|
||||||
Assert.Equal(2, matcherEndpoint.Order);
|
Assert.Equal(2, matcherEndpoint.Order);
|
||||||
},
|
},
|
||||||
(ep) =>
|
(ep) =>
|
||||||
{
|
{
|
||||||
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(ep);
|
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(ep);
|
||||||
Assert.Equal("Products/Details/{id?}", matcherEndpoint.Template);
|
Assert.Equal("Products/Details/{id?}", matcherEndpoint.RoutePattern.RawText);
|
||||||
Assert.Equal(1, matcherEndpoint.Order);
|
Assert.Equal(1, matcherEndpoint.Order);
|
||||||
},
|
},
|
||||||
(ep) =>
|
(ep) =>
|
||||||
{
|
{
|
||||||
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(ep);
|
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(ep);
|
||||||
Assert.Equal("named/Products/Details/{id?}", matcherEndpoint.Template);
|
Assert.Equal("named/Products/Details/{id?}", matcherEndpoint.RoutePattern.RawText);
|
||||||
Assert.Equal(2, matcherEndpoint.Order);
|
Assert.Equal(2, matcherEndpoint.Order);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -587,8 +587,8 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
// Assert
|
// Assert
|
||||||
var endpoint = Assert.Single(endpoints);
|
var endpoint = Assert.Single(endpoints);
|
||||||
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(endpoint);
|
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(endpoint);
|
||||||
Assert.Equal("Foo/Bar", matcherEndpoint.Template);
|
Assert.Equal("Foo/Bar", matcherEndpoint.RoutePattern.RawText);
|
||||||
AssertIsSubset(expectedDefaults, matcherEndpoint.Defaults);
|
AssertIsSubset(expectedDefaults, matcherEndpoint.RoutePattern.Defaults);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -609,8 +609,8 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
// Assert
|
// Assert
|
||||||
var endpoint = Assert.Single(endpoints);
|
var endpoint = Assert.Single(endpoints);
|
||||||
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(endpoint);
|
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(endpoint);
|
||||||
Assert.Equal("Foo/Bar", matcherEndpoint.Template);
|
Assert.Equal("Foo/Bar", matcherEndpoint.RoutePattern.RawText);
|
||||||
AssertIsSubset(expectedDefaults, matcherEndpoint.Defaults);
|
AssertIsSubset(expectedDefaults, matcherEndpoint.RoutePattern.Defaults);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -632,8 +632,8 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
// Assert
|
// Assert
|
||||||
var endpoint = Assert.Single(endpoints);
|
var endpoint = Assert.Single(endpoints);
|
||||||
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(endpoint);
|
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(endpoint);
|
||||||
Assert.Equal("Foo/Bar/{subscription=general}", matcherEndpoint.Template);
|
Assert.Equal("Foo/Bar/{subscription=general}", matcherEndpoint.RoutePattern.RawText);
|
||||||
AssertIsSubset(expectedDefaults, matcherEndpoint.Defaults);
|
AssertIsSubset(expectedDefaults, matcherEndpoint.RoutePattern.Defaults);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -654,8 +654,8 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
// Assert
|
// Assert
|
||||||
var endpoint = Assert.Single(endpoints);
|
var endpoint = Assert.Single(endpoints);
|
||||||
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(endpoint);
|
var matcherEndpoint = Assert.IsType<MatcherEndpoint>(endpoint);
|
||||||
Assert.Equal("Foo/Bar", matcherEndpoint.Template);
|
Assert.Equal("Foo/Bar", matcherEndpoint.RoutePattern.RawText);
|
||||||
AssertIsSubset(expectedDefaults, matcherEndpoint.Defaults);
|
AssertIsSubset(expectedDefaults, matcherEndpoint.RoutePattern.Defaults);
|
||||||
}
|
}
|
||||||
|
|
||||||
private MvcEndpointDataSource CreateMvcEndpointDataSource(
|
private MvcEndpointDataSource CreateMvcEndpointDataSource(
|
||||||
|
|
@ -729,7 +729,9 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
return actionDescriptor;
|
return actionDescriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AssertIsSubset(RouteValueDictionary subset, RouteValueDictionary fullSet)
|
private void AssertIsSubset(
|
||||||
|
IReadOnlyDictionary<string, object> subset,
|
||||||
|
IReadOnlyDictionary<string, object> fullSet)
|
||||||
{
|
{
|
||||||
foreach (var subsetPair in subset)
|
foreach (var subsetPair in subset)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Routing;
|
using Microsoft.AspNetCore.Routing;
|
||||||
using Microsoft.AspNetCore.Routing.Matchers;
|
using Microsoft.AspNetCore.Routing.Matchers;
|
||||||
|
using Microsoft.AspNetCore.Routing.Patterns;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -35,8 +36,7 @@ namespace Microsoft.AspNetCore.Mvc.Routing
|
||||||
var endpoints = GetDefaultEndpoints();
|
var endpoints = GetDefaultEndpoints();
|
||||||
endpoints.Add(new MatcherEndpoint(
|
endpoints.Add(new MatcherEndpoint(
|
||||||
next => httpContext => Task.CompletedTask,
|
next => httpContext => Task.CompletedTask,
|
||||||
template,
|
RoutePatternFactory.Parse(template),
|
||||||
new RouteValueDictionary(),
|
|
||||||
new RouteValueDictionary(),
|
new RouteValueDictionary(),
|
||||||
0,
|
0,
|
||||||
EndpointMetadataCollection.Empty,
|
EndpointMetadataCollection.Empty,
|
||||||
|
|
@ -51,8 +51,7 @@ namespace Microsoft.AspNetCore.Mvc.Routing
|
||||||
{
|
{
|
||||||
Endpoint = new MatcherEndpoint(
|
Endpoint = new MatcherEndpoint(
|
||||||
next => cntxt => Task.CompletedTask,
|
next => cntxt => Task.CompletedTask,
|
||||||
"/",
|
RoutePatternFactory.Parse("/"),
|
||||||
new RouteValueDictionary(),
|
|
||||||
new RouteValueDictionary(),
|
new RouteValueDictionary(),
|
||||||
0,
|
0,
|
||||||
EndpointMetadataCollection.Empty,
|
EndpointMetadataCollection.Empty,
|
||||||
|
|
@ -100,14 +99,14 @@ namespace Microsoft.AspNetCore.Mvc.Routing
|
||||||
private List<MatcherEndpoint> GetDefaultEndpoints()
|
private List<MatcherEndpoint> GetDefaultEndpoints()
|
||||||
{
|
{
|
||||||
var endpoints = new List<MatcherEndpoint>();
|
var endpoints = new List<MatcherEndpoint>();
|
||||||
endpoints.Add(CreateEndpoint(null, "home/newaction/{id?}", new { id = "defaultid", controller = "home", action = "newaction" }, 1));
|
endpoints.Add(CreateEndpoint(null, "home/newaction/{id}", new { id = "defaultid", controller = "home", action = "newaction" }, 1));
|
||||||
endpoints.Add(CreateEndpoint(null, "home/contact/{id?}", new { id = "defaultid", controller = "home", action = "contact" }, 2));
|
endpoints.Add(CreateEndpoint(null, "home/contact/{id}", new { id = "defaultid", controller = "home", action = "contact" }, 2));
|
||||||
endpoints.Add(CreateEndpoint(null, "home2/newaction/{id?}", new { id = "defaultid", controller = "home2", action = "newaction" }, 3));
|
endpoints.Add(CreateEndpoint(null, "home2/newaction/{id}", new { id = "defaultid", controller = "home2", action = "newaction" }, 3));
|
||||||
endpoints.Add(CreateEndpoint(null, "home2/contact/{id?}", new { id = "defaultid", controller = "home2", action = "contact" }, 4));
|
endpoints.Add(CreateEndpoint(null, "home2/contact/{id}", new { id = "defaultid", controller = "home2", action = "contact" }, 4));
|
||||||
endpoints.Add(CreateEndpoint(null, "home3/contact/{id?}", new { id = "defaultid", controller = "home3", action = "contact" }, 5));
|
endpoints.Add(CreateEndpoint(null, "home3/contact/{id}", new { id = "defaultid", controller = "home3", action = "contact" }, 5));
|
||||||
endpoints.Add(CreateEndpoint("namedroute", "named/home/newaction/{id?}", new { id = "defaultid", controller = "home", action = "newaction" }, 6));
|
endpoints.Add(CreateEndpoint("namedroute", "named/home/newaction/{id}", new { id = "defaultid", controller = "home", action = "newaction" }, 6));
|
||||||
endpoints.Add(CreateEndpoint("namedroute", "named/home2/newaction/{id?}", new { id = "defaultid", controller = "home2", action = "newaction" }, 7));
|
endpoints.Add(CreateEndpoint("namedroute", "named/home2/newaction/{id}", new { id = "defaultid", controller = "home2", action = "newaction" }, 7));
|
||||||
endpoints.Add(CreateEndpoint("namedroute", "named/home/contact/{id?}", new { id = "defaultid", controller = "home", action = "contact" }, 8));
|
endpoints.Add(CreateEndpoint("namedroute", "named/home/contact/{id}", new { id = "defaultid", controller = "home", action = "contact" }, 8));
|
||||||
endpoints.Add(CreateEndpoint("MyRouteName", "any/url", new { }, 9));
|
endpoints.Add(CreateEndpoint("MyRouteName", "any/url", new { }, 9));
|
||||||
return endpoints;
|
return endpoints;
|
||||||
}
|
}
|
||||||
|
|
@ -122,8 +121,7 @@ namespace Microsoft.AspNetCore.Mvc.Routing
|
||||||
|
|
||||||
return new MatcherEndpoint(
|
return new MatcherEndpoint(
|
||||||
next => (httpContext) => Task.CompletedTask,
|
next => (httpContext) => Task.CompletedTask,
|
||||||
template,
|
RoutePatternFactory.Parse(template, defaults, constraints: null),
|
||||||
new RouteValueDictionary(defaults),
|
|
||||||
new RouteValueDictionary(),
|
new RouteValueDictionary(),
|
||||||
order,
|
order,
|
||||||
metadata,
|
metadata,
|
||||||
|
|
@ -149,8 +147,7 @@ namespace Microsoft.AspNetCore.Mvc.Routing
|
||||||
{
|
{
|
||||||
return new MatcherEndpoint(
|
return new MatcherEndpoint(
|
||||||
next => c => Task.CompletedTask,
|
next => c => Task.CompletedTask,
|
||||||
template,
|
RoutePatternFactory.Parse(template, defaults, constraints: null),
|
||||||
defaults,
|
|
||||||
new RouteValueDictionary(),
|
new RouteValueDictionary(),
|
||||||
0,
|
0,
|
||||||
EndpointMetadataCollection.Empty,
|
EndpointMetadataCollection.Empty,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue