diff --git a/src/Microsoft.AspNetCore.Mvc.RazorPages/DependencyInjection/RazorPagesOptionsExtensions.cs b/src/Microsoft.AspNetCore.Mvc.RazorPages/DependencyInjection/RazorPagesOptionsExtensions.cs
index 7723852da9..2448688edb 100644
--- a/src/Microsoft.AspNetCore.Mvc.RazorPages/DependencyInjection/RazorPagesOptionsExtensions.cs
+++ b/src/Microsoft.AspNetCore.Mvc.RazorPages/DependencyInjection/RazorPagesOptionsExtensions.cs
@@ -61,7 +61,16 @@ public static RazorPagesOptions AuthorizePage(this RazorPagesOptions options, st
}
///
- /// Adds a with the specified policy to all page under the specified path.
+ /// Adds a to the page with the specified path.
+ ///
+ /// The to configure.
+ /// The path of the Razor Page.
+ /// The .
+ public static RazorPagesOptions AuthorizePage(this RazorPagesOptions options, string path) =>
+ AuthorizePage(options, path, policy: string.Empty);
+
+ ///
+ /// Adds a with the specified policy to all pages under the specified path.
///
/// The to configure.
/// The folder path.
@@ -84,6 +93,15 @@ public static RazorPagesOptions AuthorizeFolder(this RazorPagesOptions options,
return options;
}
+ ///
+ /// Adds a to all pages under the specified path.
+ ///
+ /// The to configure.
+ /// The folder path.
+ /// The .
+ public static RazorPagesOptions AuthorizeFolder(this RazorPagesOptions options, string folderPath) =>
+ AuthorizeFolder(options, folderPath, policy: string.Empty);
+
private class PageConvention : IPageApplicationModelConvention
{
private readonly string _path;
diff --git a/test/Microsoft.AspNetCore.Mvc.RazorPages.Test/DependencyInjection/RazorPagesOptionsExtensionsTest.cs b/test/Microsoft.AspNetCore.Mvc.RazorPages.Test/DependencyInjection/RazorPagesOptionsExtensionsTest.cs
index 6f2bca034c..c1b88b5442 100644
--- a/test/Microsoft.AspNetCore.Mvc.RazorPages.Test/DependencyInjection/RazorPagesOptionsExtensionsTest.cs
+++ b/test/Microsoft.AspNetCore.Mvc.RazorPages.Test/DependencyInjection/RazorPagesOptionsExtensionsTest.cs
@@ -38,7 +38,7 @@ public void AddFilter_AddsFiltersToAllPages()
}
[Fact]
- public void AuthorizePage_AddsAuthorizeFilterToSpecificPage()
+ public void AuthorizePage_AddsAuthorizeFilterWithPolicyToSpecificPage()
{
// Arrange
var options = new RazorPagesOptions();
@@ -66,10 +66,39 @@ public void AuthorizePage_AddsAuthorizeFilterToSpecificPage()
model => Assert.Empty(model.Filters));
}
+ [Fact]
+ public void AuthorizePage_AddsAuthorizeFilterWithoutPolicyToSpecificPage()
+ {
+ // Arrange
+ var options = new RazorPagesOptions();
+ var models = new[]
+ {
+ new PageApplicationModel("/Pages/Index.cshtml", "/Index.cshtml"),
+ new PageApplicationModel("/Pages/Users/Account.cshtml", "/Users/Account.cshtml"),
+ new PageApplicationModel("/Pages/Users/Contact.cshtml", "/Users/Contact.cshtml"),
+ };
+
+ // Act
+ options.AuthorizePage("/Users/Account.cshtml");
+ ApplyConventions(options, models);
+
+ // Assert
+ Assert.Collection(models,
+ model => Assert.Empty(model.Filters),
+ model =>
+ {
+ Assert.Equal("/Users/Account.cshtml", model.ViewEnginePath);
+ var authorizeFilter = Assert.IsType(Assert.Single(model.Filters));
+ var authorizeData = Assert.IsType(Assert.Single(authorizeFilter.AuthorizeData));
+ Assert.Equal(string.Empty, authorizeData.Policy);
+ },
+ model => Assert.Empty(model.Filters));
+ }
+
[Theory]
[InlineData("/Users")]
[InlineData("/Users/")]
- public void AuthorizePage_AddsAuthorizeFilterToPagesUnderFolder(string folderName)
+ public void AuthorizePage_AddsAuthorizeFilterWithPolicyToPagesUnderFolder(string folderName)
{
// Arrange
var options = new RazorPagesOptions();
@@ -103,6 +132,43 @@ public void AuthorizePage_AddsAuthorizeFilterToPagesUnderFolder(string folderNam
});
}
+ [Theory]
+ [InlineData("/Users")]
+ [InlineData("/Users/")]
+ public void AuthorizePage_AddsAuthorizeFilterWithoutPolicyToPagesUnderFolder(string folderName)
+ {
+ // Arrange
+ var options = new RazorPagesOptions();
+ var models = new[]
+ {
+ new PageApplicationModel("/Pages/Index.cshtml", "/Index.cshtml"),
+ new PageApplicationModel("/Pages/Users/Account.cshtml", "/Users/Account.cshtml"),
+ new PageApplicationModel("/Pages/Users/Contact.cshtml", "/Users/Contact.cshtml"),
+ };
+
+ // Act
+ options.AuthorizeFolder(folderName);
+ ApplyConventions(options, models);
+
+ // Assert
+ Assert.Collection(models,
+ model => Assert.Empty(model.Filters),
+ model =>
+ {
+ Assert.Equal("/Users/Account.cshtml", model.ViewEnginePath);
+ var authorizeFilter = Assert.IsType(Assert.Single(model.Filters));
+ var authorizeData = Assert.IsType(Assert.Single(authorizeFilter.AuthorizeData));
+ Assert.Equal(string.Empty, authorizeData.Policy);
+ },
+ model =>
+ {
+ Assert.Equal("/Users/Contact.cshtml", model.ViewEnginePath);
+ var authorizeFilter = Assert.IsType(Assert.Single(model.Filters));
+ var authorizeData = Assert.IsType(Assert.Single(authorizeFilter.AuthorizeData));
+ Assert.Equal(string.Empty, authorizeData.Policy);
+ });
+ }
+
private static void ApplyConventions(RazorPagesOptions options, PageApplicationModel[] models)
{
foreach (var convention in options.Conventions)
diff --git a/test/WebSites/RazorPagesWebSite/Startup.cs b/test/WebSites/RazorPagesWebSite/Startup.cs
index 1ec471eca4..369d7452a2 100644
--- a/test/WebSites/RazorPagesWebSite/Startup.cs
+++ b/test/WebSites/RazorPagesWebSite/Startup.cs
@@ -15,7 +15,7 @@ public void ConfigureServices(IServiceCollection services)
.AddCookieTempDataProvider()
.AddRazorPagesOptions(options =>
{
- options.AuthorizePage("/HelloWorldWithAuth", string.Empty);
+ options.AuthorizePage("/HelloWorldWithAuth");
});
}
diff --git a/test/WebSites/RazorPagesWebSite/StartupWithBasePath.cs b/test/WebSites/RazorPagesWebSite/StartupWithBasePath.cs
index 1881cca258..9295f0da80 100644
--- a/test/WebSites/RazorPagesWebSite/StartupWithBasePath.cs
+++ b/test/WebSites/RazorPagesWebSite/StartupWithBasePath.cs
@@ -16,8 +16,8 @@ public void ConfigureServices(IServiceCollection services)
.AddRazorPagesOptions(options =>
{
options.RootDirectory = "/Pages";
- options.AuthorizePage("/Conventions/Auth", string.Empty);
- options.AuthorizeFolder("/Conventions/AuthFolder", string.Empty);
+ options.AuthorizePage("/Conventions/Auth");
+ options.AuthorizeFolder("/Conventions/AuthFolder");
});
}