首页 文章

如何在 ASP.NET Core 中添加全局`AuthorizeFilter`或`AuthorizeAttribute`?

提问于
浏览
24

ASP.NET MVC 4及以下,我们只需在 Global.asax 中添加以下内容:

GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });

知道如何在ASP.NET 核心 MVC中做到这一点?

3 回答

  • 43

    来自文档

    您可以通过将过滤器添加到Startup类的ConfigureServices方法中的MvcOptions.Filters集合来全局注册过滤器(适用于所有控制器和操作):

    您无法将AuthorizeAttribute添加到MvcOptions.Filters中。创建AuthorizationPolicy并使用AuthorizeFilter

    var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .RequireRole("Admin", "SuperUser")
            .Build();
    
    services.AddMvc(options =>
    {
        options.Filters.Add(new AuthorizeFilter(policy));
    });
    
  • 5

    如果您使用Razor Page 核心的味道 2.0,您可以添加全局过滤器,如下所示:

    services.AddMvc()
    .AddRazorPagesOptions(options =>
            {
                options.Conventions.AuthorizeFolder("/"); // Require users to be authenticated.
                options.Conventions.AuthorizeFolder("/", "YourPolicyName"); // Require a policy to be full filled globally.
            });
    
  • 4

    您也可以使用以下代码。这是使用类型而不是实例。

    services.AddMvc(options =>
    {
        options.Filters.Add(typeof(AuthorizeFilter));
    });
    

    使用依赖注入,您可以解析策略对象。

相关问题