作者:Luke Latham
在 Razor Pages 应用程序中控制访问权限的一种方法是在启动时使用授权约定。 这些约定允许用户授权用户, 并允许匿名用户访问页面的各个页面或文件夹。 本主题中所述的约定会自动应用授权筛选器来控制访问权限。
示例应用使用cookie 身份验证, 但不 ASP.NET Core 标识。 概念和本主题中所示的示例同样适用于使用 ASP.NET Core 标识的应用。 若要使用 ASP.NET Core 标识, 请按照中ASP.NET Core 上的标识简介的指导进行操作。
使用约定通过AddRazorPagesOptions将添加AuthorizeFilter到页面中的指定路径: AuthorizePage
services.AddRazorPages() .AddRazorPagesOptions(options => { options.Conventions.AuthorizePage("/Contact"); options.Conventions.AuthorizeFolder("/Private"); options.Conventions.AllowAnonymousToPage("/Private/PublicPage"); options.Conventions.AllowAnonymousToFolder("/Private/PublicPages"); });
指定的路径为视图引擎路径, 它是不带扩展名的 Razor Pages 根相对路径, 并且仅包含正斜杠。
若要指定授权策略, 请使用AuthorizePage 重载:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
备注
可应用于[Authorize]
具有 filter 特性的页模型类。 AuthorizeFilter 有关详细信息, 请参阅授权筛选器属性。
使用约定通过AddRazorPagesOptions将添加AuthorizeFilter到文件夹中指定路径的所有页面: AuthorizeFolder
services.AddRazorPages() .AddRazorPagesOptions(options => { options.Conventions.AuthorizePage("/Contact"); options.Conventions.AuthorizeFolder("/Private"); options.Conventions.AllowAnonymousToPage("/Private/PublicPage"); options.Conventions.AllowAnonymousToFolder("/Private/PublicPages"); });
指定的路径为视图引擎路径, 该路径是 Razor Pages 根相对路径。
若要指定授权策略, 请使用AuthorizeFolder 重载:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
使用约定通过AddRazorPagesOptions将添加AuthorizeFilter到指定路径处的区域页: AuthorizeAreaPage
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
页面名称是文件的路径, 该文件的扩展名相对于指定区域的页根目录。 例如, 文件区域/标识/页面/管理/帐户的页名称为 /Manage/Accounts。
若要指定授权策略, 请使用AuthorizeAreaPage 重载:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
使用约定通过AddRazorPagesOptions将添加AuthorizeFilter到文件夹中指定路径的所有区域: AuthorizeAreaFolder
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
文件夹路径是文件夹相对于指定区域的页面根目录的路径。 例如, "区域/标识/页面/管理/ " 下的文件的文件夹路径为 /Manage。
若要指定授权策略, 请使用AuthorizeAreaFolder 重载:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
使用约定通过AddRazorPagesOptions将添加AllowAnonymousFilter到位于指定路径的页面: AllowAnonymousToPage
services.AddRazorPages() .AddRazorPagesOptions(options => { options.Conventions.AuthorizePage("/Contact"); options.Conventions.AuthorizeFolder("/Private"); options.Conventions.AllowAnonymousToPage("/Private/PublicPage"); options.Conventions.AllowAnonymousToFolder("/Private/PublicPages"); });
指定的路径为视图引擎路径, 它是不带扩展名的 Razor Pages 根相对路径, 并且仅包含正斜杠。
使用约定通过AddRazorPagesOptions将添加AllowAnonymousFilter到文件夹中指定路径的所有页面: AllowAnonymousToFolder
services.AddRazorPages() .AddRazorPagesOptions(options => { options.Conventions.AuthorizePage("/Contact"); options.Conventions.AuthorizeFolder("/Private"); options.Conventions.AllowAnonymousToPage("/Private/PublicPage"); options.Conventions.AllowAnonymousToFolder("/Private/PublicPages"); });
指定的路径为视图引擎路径, 该路径是 Razor Pages 根相对路径。
有效的方法是, 指定需要授权的页面文件夹, 并指定该文件夹中的页面允许匿名访问:
// This works. .AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
但是, 反之则无效。 不能声明用于匿名访问的页面文件夹, 然后在该文件夹中指定需要授权的页面:
// This doesn't work! .AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
在专用页面上要求授权失败。 AllowAnonymousFilter当和AuthorizeFilter都应用于页面时, 将AllowAnonymousFilter优先并控制访问。
在 Razor Pages 应用程序中控制访问权限的一种方法是在启动时使用授权约定。 这些约定允许用户授权用户, 并允许匿名用户访问页面的各个页面或文件夹。 本主题中所述的约定会自动应用授权筛选器来控制访问权限。
示例应用使用cookie 身份验证, 但不 ASP.NET Core 标识。 概念和本主题中所示的示例同样适用于使用 ASP.NET Core 标识的应用。 若要使用 ASP.NET Core 标识, 请按照中ASP.NET Core 上的标识简介的指导进行操作。
使用约定通过AddRazorPagesOptions将添加AuthorizeFilter到页面中的指定路径: AuthorizePage
services.AddMvc() .AddRazorPagesOptions(options => { options.Conventions.AuthorizePage("/Contact"); options.Conventions.AuthorizeFolder("/Private"); options.Conventions.AllowAnonymousToPage("/Private/PublicPage"); options.Conventions.AllowAnonymousToFolder("/Private/PublicPages"); }) .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
指定的路径为视图引擎路径, 它是不带扩展名的 Razor Pages 根相对路径, 并且仅包含正斜杠。
若要指定授权策略, 请使用AuthorizePage 重载:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
备注
可应用于[Authorize]
具有 filter 特性的页模型类。 AuthorizeFilter 有关详细信息, 请参阅授权筛选器属性。
使用约定通过AddRazorPagesOptions将添加AuthorizeFilter到文件夹中指定路径的所有页面: AuthorizeFolder
services.AddMvc() .AddRazorPagesOptions(options => { options.Conventions.AuthorizePage("/Contact"); options.Conventions.AuthorizeFolder("/Private"); options.Conventions.AllowAnonymousToPage("/Private/PublicPage"); options.Conventions.AllowAnonymousToFolder("/Private/PublicPages"); }) .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
指定的路径为视图引擎路径, 该路径是 Razor Pages 根相对路径。
若要指定授权策略, 请使用AuthorizeFolder 重载:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
使用约定通过AddRazorPagesOptions将添加AuthorizeFilter到指定路径处的区域页: AuthorizeAreaPage
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
页面名称是文件的路径, 该文件的扩展名相对于指定区域的页根目录。 例如, 文件区域/标识/页面/管理/帐户的页名称为 /Manage/Accounts。
若要指定授权策略, 请使用AuthorizeAreaPage 重载:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
使用约定通过AddRazorPagesOptions将添加AuthorizeFilter到文件夹中指定路径的所有区域: AuthorizeAreaFolder
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
文件夹路径是文件夹相对于指定区域的页面根目录的路径。 例如, "区域/标识/页面/管理/ " 下的文件的文件夹路径为 /Manage。
若要指定授权策略, 请使用AuthorizeAreaFolder 重载:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
使用约定通过AddRazorPagesOptions将添加AllowAnonymousFilter到位于指定路径的页面: AllowAnonymousToPage
services.AddMvc() .AddRazorPagesOptions(options => { options.Conventions.AuthorizePage("/Contact"); options.Conventions.AuthorizeFolder("/Private"); options.Conventions.AllowAnonymousToPage("/Private/PublicPage"); options.Conventions.AllowAnonymousToFolder("/Private/PublicPages"); }) .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
指定的路径为视图引擎路径, 它是不带扩展名的 Razor Pages 根相对路径, 并且仅包含正斜杠。
使用约定通过AddRazorPagesOptions将添加AllowAnonymousFilter到文件夹中指定路径的所有页面: AllowAnonymousToFolder
services.AddMvc() .AddRazorPagesOptions(options => { options.Conventions.AuthorizePage("/Contact"); options.Conventions.AuthorizeFolder("/Private"); options.Conventions.AllowAnonymousToPage("/Private/PublicPage"); options.Conventions.AllowAnonymousToFolder("/Private/PublicPages"); }) .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
指定的路径为视图引擎路径, 该路径是 Razor Pages 根相对路径。
有效的方法是, 指定需要授权的页面文件夹, 并指定该文件夹中的页面允许匿名访问:
// This works. .AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
但是, 反之则无效。 不能声明用于匿名访问的页面文件夹, 然后在该文件夹中指定需要授权的页面:
// This doesn't work! .AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
在专用页面上要求授权失败。 AllowAnonymousFilter当和AuthorizeFilter都应用于页面时, 将AllowAnonymousFilter优先并控制访问。