- 在 ASP.NET Core razor 页授权约定Razor Pages authorization conventions in ASP.NET Core
- 需要授权才能访问页面Require authorization to access a page
- 需要授权才能访问页的文件夹Require authorization to access a folder of pages
- 需要授权才能访问区域页Require authorization to access an area page
- 需要授权才能访问区域文件夹Require authorization to access a folder of areas
- 允许匿名访问页面Allow anonymous access to a page
- 允许匿名访问页面文件夹Allow anonymous access to a folder of pages
- 合并授权访问和匿名访问时的注意事项Note on combining authorized and anonymous access
- 其他资源Additional resources
- 需要授权才能访问页面Require authorization to access a page
- 需要授权才能访问页的文件夹Require authorization to access a folder of pages
- 需要授权才能访问区域页Require authorization to access an area page
- 需要授权才能访问区域文件夹Require authorization to access a folder of areas
- 允许匿名访问页面Allow anonymous access to a page
- 允许匿名访问页面文件夹Allow anonymous access to a folder of pages
- 合并授权访问和匿名访问时的注意事项Note on combining authorized and anonymous access
- 其他资源Additional resources
在 ASP.NET Core razor 页授权约定Razor Pages authorization conventions in ASP.NET Core
本文内容
在 Razor Pages 应用程序中控制访问权限的一种方法是在启动时使用授权约定。这些约定允许用户授权用户,并允许匿名用户访问页面的各个页面或文件夹。本主题中所述的约定会自动应用授权筛选器来控制访问权限。
示例应用使用cookie 身份验证,但不 ASP.NET Core 标识。概念和本主题中所示的示例同样适用于使用 ASP.NET Core 标识的应用。若要使用 ASP.NET Core 标识,请按照 ASP.NET Core 上的标识简介中的指南进行操作。
需要授权才能访问页面Require authorization to access a page
通过 AddRazorPagesOptions 使用 AuthorizePage 约定,将 AuthorizeFilter 添加到页面中的指定路径:
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");
备注
AuthorizeFilter 可以应用于具有 [Authorize]
filter 特性的页模型类。有关详细信息,请参阅授权筛选器属性。
需要授权才能访问页的文件夹Require authorization to access a folder of pages
通过 AddRazorPagesOptions 使用 AuthorizeFolder 约定,将 AuthorizeFilter 添加到文件夹中指定路径的所有页面:
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");
需要授权才能访问区域页Require authorization to access an area page
通过 AddRazorPagesOptions 使用 AuthorizeAreaPage 约定,将 AuthorizeFilter 添加到指定路径处的区域页:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
页面名称是文件的路径,该文件的扩展名相对于指定区域的页根目录。例如,文件区域/标识/页面/管理/帐户的页名称为 /Manage/Accounts。
若要指定授权策略,请使用AuthorizeAreaPage 重载:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
需要授权才能访问区域文件夹Require authorization to access a folder of areas
通过 AddRazorPagesOptions 使用 AuthorizeAreaFolder 约定,将 AuthorizeFilter 添加到文件夹中指定路径的所有区域:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
文件夹路径是文件夹相对于指定区域的页面根目录的路径。例如,"区域/标识/页面/管理/ " 下的文件的文件夹路径为 /Manage。
若要指定授权策略,请使用AuthorizeAreaFolder 重载:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
允许匿名访问页面Allow anonymous access to a page
通过 AddRazorPagesOptions 使用 AllowAnonymousToPage 约定,将 AllowAnonymousFilter 添加到页面中的指定路径:
services.AddRazorPages()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
指定的路径为视图引擎路径,它是不带扩展名的 Razor Pages 根相对路径,并且仅包含正斜杠。
允许匿名访问页面文件夹Allow anonymous access to a folder of pages
通过 AddRazorPagesOptions 使用 AllowAnonymousToFolder 约定,将 AllowAnonymousFilter 添加到文件夹中指定路径的所有页面:
services.AddRazorPages()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
指定的路径为视图引擎路径,该路径是 Razor Pages 根相对路径。
合并授权访问和匿名访问时的注意事项Note on combining authorized and anonymous access
有效的方法是指定页面的文件夹需要授权,然后指定该文件夹中的页面允许匿名访问:
// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
但是,反之则无效。不能声明用于匿名访问的页面文件夹,然后在该文件夹中指定需要授权的页面:
// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
在专用页面上要求授权失败。将 AllowAnonymousFilter 和 AuthorizeFilter 应用于页面时,AllowAnonymousFilter 优先并控制访问。
其他资源Additional resources
在 Razor Pages 应用程序中控制访问权限的一种方法是在启动时使用授权约定。这些约定允许用户授权用户,并允许匿名用户访问页面的各个页面或文件夹。本主题中所述的约定会自动应用授权筛选器来控制访问权限。
示例应用使用cookie 身份验证,但不 ASP.NET Core 标识。概念和本主题中所示的示例同样适用于使用 ASP.NET Core 标识的应用。若要使用 ASP.NET Core 标识,请按照 ASP.NET Core 上的标识简介中的指南进行操作。
需要授权才能访问页面Require authorization to access a page
通过 AddRazorPagesOptions 使用 AuthorizePage 约定,将 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);
指定的路径为视图引擎路径,它是不带扩展名的 Razor Pages 根相对路径,并且仅包含正斜杠。
若要指定授权策略,请使用AuthorizePage 重载:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
备注
AuthorizeFilter 可以应用于具有 [Authorize]
filter 特性的页模型类。有关详细信息,请参阅授权筛选器属性。
需要授权才能访问页的文件夹Require authorization to access a folder of pages
通过 AddRazorPagesOptions 使用 AuthorizeFolder 约定,将 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);
指定的路径为视图引擎路径,该路径是 Razor Pages 根相对路径。
若要指定授权策略,请使用AuthorizeFolder 重载:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
需要授权才能访问区域页Require authorization to access an area page
通过 AddRazorPagesOptions 使用 AuthorizeAreaPage 约定,将 AuthorizeFilter 添加到指定路径处的区域页:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
页面名称是文件的路径,该文件的扩展名相对于指定区域的页根目录。例如,文件区域/标识/页面/管理/帐户的页名称为 /Manage/Accounts。
若要指定授权策略,请使用AuthorizeAreaPage 重载:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
需要授权才能访问区域文件夹Require authorization to access a folder of areas
通过 AddRazorPagesOptions 使用 AuthorizeAreaFolder 约定,将 AuthorizeFilter 添加到文件夹中指定路径的所有区域:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
文件夹路径是文件夹相对于指定区域的页面根目录的路径。例如,"区域/标识/页面/管理/ " 下的文件的文件夹路径为 /Manage。
若要指定授权策略,请使用AuthorizeAreaFolder 重载:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
允许匿名访问页面Allow anonymous access to a page
通过 AddRazorPagesOptions 使用 AllowAnonymousToPage 约定,将 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);
指定的路径为视图引擎路径,它是不带扩展名的 Razor Pages 根相对路径,并且仅包含正斜杠。
允许匿名访问页面文件夹Allow anonymous access to a folder of pages
通过 AddRazorPagesOptions 使用 AllowAnonymousToFolder 约定,将 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);
指定的路径为视图引擎路径,该路径是 Razor Pages 根相对路径。
合并授权访问和匿名访问时的注意事项Note on combining authorized and anonymous access
有效的方法是,指定需要授权的页面文件夹,并指定该文件夹中的页面允许匿名访问:
// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
但是,反之则无效。不能声明用于匿名访问的页面文件夹,然后在该文件夹中指定需要授权的页面:
// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
在专用页面上要求授权失败。将 AllowAnonymousFilter 和 AuthorizeFilter 应用于页面时,AllowAnonymousFilter 优先并控制访问。