Authorize 属性和 AuthorizePage(string) 方法之间的区别

Difference between Authorize attribute and AuthorizePage(string) method

我想知道 ASP.NET Core 中的 [Authorize] 属性和 AuthorizePage(string) 方法有什么区别吗?项目使用 ASP.NET Core 3.1。使用一个有什么好处或坏处吗?

据我所知,下面的两个代码做同样的事情:

使用 [Authorize] 属性

// ...
namespace MyApp.Account.Manage
{
    [Authorize]
    public partial class IndexModel : PageModel
    {
// ...

使用 AuthorizePage(string) 中的方法 Startup.ConfigureServices

services.AddMvc()
  .AddMvcOptions(o => o.EnableEndpointRouting = false)
  .AddRazorPagesOptions(options =>
  {
     options.Conventions.AuthorizePage("Account/Manage");
  });

你说得对,[Authorize]属性和AuthorizePage()都设置了指定页面的授权。

使用 [Authorize] 属性。

Role-Based 授权中使用的授权属性,它使您能够根据角色限制对资源的访问。它是一个声明性属性,可以应用于控制器或操作方法或 Razor 页面。如果不带任何参数指定此属性,它只会检查用户是否已通过身份验证。

通过Authorize属性,当用户访问指定的控制器或action方法或Razor页面时,会检查当前用户是否有权限访问。

使用 AddRazorPagesOptions 方法和 AuthorizePage() 方法。

Asp.net 核心提供了一种在 Razor Pages 应用程序中控制访问的方法,即在启动时使用授权约定。通过这种方式,我们可以使用 AddRazorPagesOptions 方法为页面添加约定,例如使用 AuthorizePage 方法为指定页面添加授权(与 Authorize 属性相同)。

但是通过使用授权约定的方法,它提供了相关的方法来对页面文件夹、区域页面或区域文件夹进行授权。

总结,如果你只是想为指定的页面设置授权,你可以使用它们中的每一个。但是,如果要为多个页面设置授权,最好使用授权约定方法。更多详细信息,查看Razor Pages authorization conventions in ASP.NET Core.