Authorize属性和AuthorizePagestring方法之间的区别

问题描述

我想知道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]属性。

基于角色的授权中使用的Authorize属性,使您可以基于角色来限制对资源的访问。它是一种声明性属性,可以应用于控制器或操作方法或“剃刀”页面。如果指定此属性时不带任何参数,它将仅检查用户是否已通过身份验证。

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

使用AddRazorPagesOptions方法和Aut​​horizePage()方法。

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

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

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