如何在 asp.net core razor 页面中拒绝匿名用户?

Posted

技术标签:

【中文标题】如何在 asp.net core razor 页面中拒绝匿名用户?【英文标题】:How to deny anonymous users in asp.net core razor pages? 【发布时间】:2019-12-28 10:40:06 【问题描述】:

如何拒绝匿名用户访问除登录页面之外的 asp.net core 中的任何剃须刀页面?

我试过了

    services.AddMvc()
        .AddRazorPagesOptions(options =>
        
            options.RootDirectory = "/";
            options.Conventions.AllowAnonymousToPage("/Account/Login");
            options.Conventions.AuthorizeFolder("/");
        )
        .SetCompatibilityVersion(CompatibilityVersion.Latest);

【问题讨论】:

【参考方案1】:

对于 Razor Pages 2.x 应用程序,您只需将以下内容添加到您的 Configure 方法中,以防止未经授权的用户访问 Pages 文件夹或子文件夹中的任何页面:

services.AddMvc().AddRazorPagesOptions(options => 
    options.Conventions.AuthorizeFolder("/");
);

如果您使用的是 .NET Core 3,以下内容将执行相同的操作:

services.AddRazorPages(options => 
    options.Conventions.AuthorizeFolder("/");
);

未经授权的用户将被重定向到默认登录页面,即Identity/Account/Login

【讨论】:

【参考方案2】:

在控制器中添加属性

[Authorize]
public class HomeController : Controller 

然后在您想匿名访问的端点中

[AllowAnonymous] 
public ViewResult Index() 
 
      return View(); 
  

或者你可以创建一个基本控制器类

[Authorize]
public class BaseController : Controller 

    ...

然后继承它

public class HomeController : BaseController

or as listed in this documentation

//sample code
services.AddMvc()
    .AddRazorPagesOptions(options =>
    
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    )

also here, GlobalFilters

//listed answer
GlobalFilters.Filters.Add(new AuthorizeAttribute()  Roles = "Admin, SuperUser" );

【讨论】:

问题是关于剃须刀页面的,我想在一个地方做,而不是每个页面 @mko 在文档中添加了addrazorpagesoptions @mko 从***.com/a/22597699/2122217 添加了GlobalFilters,但必须将[AllowAnonymous] 放在登录页面中 大部分建议在 Razor Pages 中不起作用。没有控制器。您不能将 Authorize 属性放在操作方法上,并且过滤器在 Razor 页面中以不同的方式应用。

以上是关于如何在 asp.net core razor 页面中拒绝匿名用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core 2.0 Razor 页面中填充下拉列表

如何在 ASP.NET Core Razor 页面中绑定复杂列表

如何使用 ASP.NET Core Razor 页面预选下拉列表中的项目

如何使用 Url.Action 在 asp.net core 2.0 razor 页面中传递多个操作

Asp.net Core 3.1-如何从控制器返回到 Razor 页面?

如何在 asp.net core .NET6(Razor 页面)中的单个 cshtml 中显示来自多个表/模型的数据