From 7f3f6957bef7ffd15513e3027c851ee23987df52 Mon Sep 17 00:00:00 2001 From: Ryan Brandenburg Date: Thu, 9 Mar 2017 16:15:43 -0800 Subject: [PATCH] Set path in DefaultPageFactory (#5911) --- .../Infrastructure/DefaultPageFactory.cs | 1 + .../RazorPagesTest.cs | 14 +++++++++ .../Infrastructure/DefaultPageFactoryTest.cs | 30 ++++++++++++++++++- .../WebSites/RazorPagesWebSite/PathSet.cshtml | 3 ++ 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 test/WebSites/RazorPagesWebSite/PathSet.cshtml diff --git a/src/Microsoft.AspNetCore.Mvc.RazorPages/Infrastructure/DefaultPageFactory.cs b/src/Microsoft.AspNetCore.Mvc.RazorPages/Infrastructure/DefaultPageFactory.cs index c8d4ec56d0..f815b6d4ff 100644 --- a/src/Microsoft.AspNetCore.Mvc.RazorPages/Infrastructure/DefaultPageFactory.cs +++ b/src/Microsoft.AspNetCore.Mvc.RazorPages/Infrastructure/DefaultPageFactory.cs @@ -61,6 +61,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure { var page = (Page)activatorFactory(context); page.PageContext = context; + page.Path = context.ActionDescriptor.RelativePath; propertyActivator.Activate(page, context); return page; }; diff --git a/test/Microsoft.AspNetCore.Mvc.FunctionalTests/RazorPagesTest.cs b/test/Microsoft.AspNetCore.Mvc.FunctionalTests/RazorPagesTest.cs index d19b5779da..7c5b18fc62 100644 --- a/test/Microsoft.AspNetCore.Mvc.FunctionalTests/RazorPagesTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.FunctionalTests/RazorPagesTest.cs @@ -18,6 +18,20 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests public HttpClient Client { get; } + [Fact] + public async Task Page_SetsPath() + { + // Arrange + var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/PathSet"); + + // Act + var response = await Client.SendAsync(request); + + // Assert + var content = await response.Content.ReadAsStringAsync(); + Assert.Equal("Path: /PathSet.cshtml", content.Trim()); + } + [Fact] public async Task NoPage_NotFound() { diff --git a/test/Microsoft.AspNetCore.Mvc.RazorPages.Test/Infrastructure/DefaultPageFactoryTest.cs b/test/Microsoft.AspNetCore.Mvc.RazorPages.Test/Infrastructure/DefaultPageFactoryTest.cs index 736bcc78ae..110c37a9b2 100644 --- a/test/Microsoft.AspNetCore.Mvc.RazorPages.Test/Infrastructure/DefaultPageFactoryTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.RazorPages.Test/Infrastructure/DefaultPageFactoryTest.cs @@ -49,7 +49,10 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure { PageTypeInfo = typeof(TestPage).GetTypeInfo(), }; - var pageContext = new PageContext(); + var pageContext = new PageContext + { + ActionDescriptor = descriptor + }; var factoryProvider = CreatePageFactory(); // Act @@ -94,6 +97,31 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure Assert.NotNull(testPage.ViewData); } + [Fact] + public void PageFactorySetsPath() + { + // Arrange + var descriptor = new CompiledPageActionDescriptor + { + PageTypeInfo = typeof(ViewDataTestPage).GetTypeInfo(), + ModelTypeInfo = typeof(ViewDataTestPageModel).GetTypeInfo() + }; + descriptor.RelativePath = "/this/is/a/path.cshtml"; + + var pageContext = new PageContext + { + ActionDescriptor = descriptor + }; + + // Act + var factory = CreatePageFactory().CreatePageFactory(descriptor); + var instance = factory(pageContext); + + // Assert + var testPage = Assert.IsType(instance); + Assert.Equal("/this/is/a/path.cshtml", testPage.Path); + } + [Fact] public void PageFactorySetViewDataWithModelTypeWhenNotNull() { diff --git a/test/WebSites/RazorPagesWebSite/PathSet.cshtml b/test/WebSites/RazorPagesWebSite/PathSet.cshtml new file mode 100644 index 0000000000..2431041ec0 --- /dev/null +++ b/test/WebSites/RazorPagesWebSite/PathSet.cshtml @@ -0,0 +1,3 @@ +@page + +Path: @Path \ No newline at end of file