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

xir*_*ird 26 c# asp.net-core-mvc asp.net-core

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

GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });
Run Code Online (Sandbox Code Playgroud)

知道如何在ASP.NET Core MVC中执行此操作吗?

tmg*_*tmg 48

来自docs:

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

您不能添加AuthorizeAttribute到MvcOptions.Filters.创建AuthorizationPolicy并使用AuthorizeFilter:

var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .RequireRole("Admin", "SuperUser")
        .Build();

services.AddMvc(options =>
{
    options.Filters.Add(new AuthorizeFilter(policy));
});
Run Code Online (Sandbox Code Playgroud)


max*_*pan 8

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

services.AddMvc(options =>
{
    options.Filters.Add(typeof(AuthorizeFilter));
});
Run Code Online (Sandbox Code Playgroud)

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


Bud*_*hiP 5

如果您使用ASP.NET Core 2.0的Razor Page风格,您可以添加全局过滤器,如下所示:

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