ASP.NET Core 中的 Razor Pages 授权约定
在 Razor Pages 应用中控制访问的一种方法是在启动时使用授权约定。 使用这些约定可授权用户并允许匿名用户访问各个页面或页面文件夹。 本主题中介绍的约定会自动应用授权筛选器来控制访问。
示例应用使用cookie没有 ASP.NET Core 的身份验证Identity。 本主题所示的概念和示例同样适用于使用 ASP.NET Core Identity的应用。 要使用 ASP.NET Core Identity,请按照 ASP.NET Core 简介Identity中的指导进行操作。
需要授权才能访问页面
使用 AuthorizePage 约定将 AuthorizeFilter 添加到指定路径的页面:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
指定的路径是 View Engine 路径,即 Razor Pages 根相对路径,且不含扩展名,仅包含正斜杠。
若要指定授权策略,请使用 AuthorizePage 重载:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
注意
AuthorizeFilter 可以应用于具有 [Authorize]
筛选器属性的页面模型类。 有关详细信息,请参阅授权筛选器属性。
需要授权才能访问页面文件夹
使用 AuthorizeFolder 约定将 AuthorizeFilter 添加到指定路径的文件夹中的所有页面:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
指定的路径是 View Engine 路径,即 Razor Pages 根相对路径。
若要指定授权策略,请使用 AuthorizeFolder 重载:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
需要授权才能访问区域页面
使用 AuthorizeAreaPage 约定将 AuthorizeFilter 添加到指定路径的区域页面:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
页面名是文件的路径,且不含与指定区域的页根目录相关的扩展名。 例如,文件 Areas/Identity/Pages/Manage/Accounts.cshtml
的页面名称为 /Manage/Accounts。
若要指定授权策略,请使用 AuthorizeAreaPage 重载:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
需要授权才能访问区域文件夹
使用 AuthorizeAreaFolder 约定将 AuthorizeFilter 添加到指定路径的文件夹中的所有区域:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
文件夹路径是与指定区域的页根目录相关的文件夹的路径。 例如,Areas/Identity/Pages/Manage/ 下的文件的文件夹路径为 /Manage。
若要指定授权策略,请使用 AuthorizeAreaFolder 重载:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
允许对页面进行匿名访问
使用 AllowAnonymousToPage 约定将 AllowAnonymousFilter 添加到指定路径的页面:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
指定的路径是 View Engine 路径,即 Razor Pages 根相对路径,且不含扩展名,仅包含正斜杠。
允许匿名访问页面文件夹
使用 AllowAnonymousToFolder 约定将 AllowAnonymousFilter 添加到指定路径的文件夹中的所有页面:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
指定的路径是 View Engine 路径,即 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 的身份验证Identity。 本主题所示的概念和示例同样适用于使用 ASP.NET Core Identity的应用。 要使用 ASP.NET Core Identity,请按照 ASP.NET Core 简介Identity中的指导进行操作。
需要授权才能访问页面
使用 AuthorizePage 约定通过 AddRazorPagesOptions 将 AuthorizeFilter 添加到指定路径的页面:
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);
指定的路径是 View Engine 路径,即 Razor Pages 根相对路径,且不含扩展名,仅包含正斜杠。
若要指定授权策略,请使用 AuthorizePage 重载:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
注意
AuthorizeFilter 可以应用于具有 [Authorize]
筛选器属性的页面模型类。 有关详细信息,请参阅授权筛选器属性。
需要授权才能访问页面文件夹
使用 AuthorizeFolder 约定通过 AddRazorPagesOptions 将 AuthorizeFilter 添加到指定路径的文件夹中的所有页面:
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);
指定的路径是 View Engine 路径,即 Razor Pages 根相对路径。
若要指定授权策略,请使用 AuthorizeFolder 重载:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
需要授权才能访问区域页面
使用 AuthorizeAreaPage 约定通过 AddRazorPagesOptions 将 AuthorizeFilter 添加到指定路径的区域页面:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
页面名是文件的路径,且不含与指定区域的页根目录相关的扩展名。 例如,文件 Areas/Identity/Pages/Manage/Accounts.cshtml
的页面名称为 /Manage/Accounts。
若要指定授权策略,请使用 AuthorizeAreaPage 重载:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
需要授权才能访问区域文件夹
使用 AuthorizeAreaFolder 约定通过 AddRazorPagesOptions 将 AuthorizeFilter 添加到指定路径的文件夹中的所有区域:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
文件夹路径是与指定区域的页根目录相关的文件夹的路径。 例如,Areas/Identity/Pages/Manage/ 下的文件的文件夹路径为 /Manage。
若要指定授权策略,请使用 AuthorizeAreaFolder 重载:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
允许对页面进行匿名访问
使用 AllowAnonymousToPage 约定通过 AddRazorPagesOptions 将 AllowAnonymousFilter 添加到指定路径的页面:
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);
指定的路径是 View Engine 路径,即 Razor Pages 根相对路径,且不含扩展名,仅包含正斜杠。
允许匿名访问页面文件夹
使用 AllowAnonymousToFolder 约定通过 AddRazorPagesOptions 将 AllowAnonymousFilter 添加到指定路径的文件夹中的所有页面:
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);
指定的路径是 View Engine 路径,即 Razor Pages 根相对路径。
关于结合授权访问和匿名访问的注意事项
先指定需要授权的页面文件夹,然后指定该文件夹中的页面允许匿名访问,这样操作是有效的:
// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
但反之则无效。 不可以先为匿名访问声明页面文件夹,然后在该文件夹中指定需要授权的页面:
// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
在“专用”页面上要求授权失败。 AllowAnonymousFilter 和 AuthorizeFilter 都应用于页面时,AllowAnonymousFilter 优先并控制访问。
其他资源
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈