Fix PageRouteTransformerConvention with custom page routes (#8576)

This commit is contained in:
James Newton-King 2018-10-10 18:33:30 +13:00 committed by GitHub
parent 6cee2431f1
commit 9daf5ff7a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 20 additions and 10 deletions

View File

@ -129,8 +129,10 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
var pageRouteMetadata = selectorModel.EndpointMetadata.OfType<PageRouteMetadata>().SingleOrDefault(); var pageRouteMetadata = selectorModel.EndpointMetadata.OfType<PageRouteMetadata>().SingleOrDefault();
if (pageRouteMetadata == null) if (pageRouteMetadata == null)
{ {
// Selector does not have expected metadata. Should never reach here // Selector does not have expected metadata
throw new InvalidOperationException("Page selector did not have page route metadata."); // This selector was likely configured by AddPageRouteModelConvention
// Use the existing explicitly configured template
return selectorModel.AttributeRouteModel.Template;
} }
var segments = pageRouteMetadata.PageRoute.Split('/'); var segments = pageRouteMetadata.PageRoute.Split('/');

View File

@ -147,6 +147,18 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
Assert.Equal("Hello from World", body); Assert.Equal("Hello from World", body);
} }
[Fact]
public async Task Page_PageRouteTransformer_PageWithConfiguredRoute()
{
// Arrange & Act
var response = await Client.GetAsync("http://localhost/PageRouteTransformer/NewConventionRoute/World");
// Assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var body = await response.Content.ReadAsStringAsync();
Assert.Equal("Hello from World", body);
}
[Fact] [Fact]
public virtual async Task ConventionalRoutedController_ActionIsReachable() public virtual async Task ConventionalRoutedController_ActionIsReachable()
{ {

View File

@ -1,4 +1,2 @@
@page "{id?}" @page "{id?}"
@model RoutingWebSite.Pages.LGAnotherPageModel @model RoutingWebSite.Pages.LGAnotherPageModel
@{
}

View File

@ -1,4 +1,2 @@
@page "{id?}" @page "{id?}"
@model BasicWebSite.Pages.LGPageModel @model BasicWebSite.Pages.LGPageModel
@{
}

View File

@ -1,3 +1 @@
@page @page
@{
}

View File

@ -0,0 +1,2 @@
@page "ExtraPath/{id?}"
Hello from @ViewContext.RouteData.Values["id"]

View File

@ -1,4 +1,2 @@
@page "ExtraPath/{id?}" @page "ExtraPath/{id?}"
@{
}
Hello from @ViewContext.RouteData.Values["id"] Hello from @ViewContext.RouteData.Values["id"]

View File

@ -28,6 +28,7 @@ namespace RoutingWebSite
}) })
.AddRazorPagesOptions(options => .AddRazorPagesOptions(options =>
{ {
options.Conventions.AddPageRoute("/PageRouteTransformer/PageWithConfiguredRoute", "/PageRouteTransformer/NewConventionRoute/{id?}");
options.Conventions.AddFolderRouteModelConvention("/PageRouteTransformer", model => options.Conventions.AddFolderRouteModelConvention("/PageRouteTransformer", model =>
{ {
pageRouteTransformerConvention.Apply(model); pageRouteTransformerConvention.Apply(model);

View File

@ -26,6 +26,7 @@ namespace RoutingWebSite
.AddMvc() .AddMvc()
.AddRazorPagesOptions(options => .AddRazorPagesOptions(options =>
{ {
options.Conventions.AddPageRoute("/PageRouteTransformer/PageWithConfiguredRoute", "/PageRouteTransformer/NewConventionRoute/{id?}");
options.Conventions.AddFolderRouteModelConvention("/PageRouteTransformer", model => options.Conventions.AddFolderRouteModelConvention("/PageRouteTransformer", model =>
{ {
pageRouteTransformerConvention.Apply(model); pageRouteTransformerConvention.Apply(model);