在ASP.NET MVC 4及以下,我们只需在 Global.asax 中添加以下内容:
GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });
知道如何在ASP.NET 核心 MVC中做到这一点?
来自文档:
您可以通过将过滤器添加到Startup类的ConfigureServices方法中的MvcOptions.Filters集合来全局注册过滤器(适用于所有控制器和操作):
Startup
ConfigureServices
MvcOptions.Filters
您无法将AuthorizeAttribute添加到MvcOptions.Filters中。创建AuthorizationPolicy并使用AuthorizeFilter:
AuthorizeAttribute
AuthorizationPolicy
AuthorizeFilter
var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .RequireRole("Admin", "SuperUser") .Build(); services.AddMvc(options => { options.Filters.Add(new AuthorizeFilter(policy)); });
如果您使用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. });
您也可以使用以下代码。这是使用类型而不是实例。
services.AddMvc(options => { options.Filters.Add(typeof(AuthorizeFilter)); });
使用依赖注入,您可以解析策略对象。
3 回答
来自文档:
您无法将
AuthorizeAttribute
添加到MvcOptions.Filters
中。创建AuthorizationPolicy
并使用AuthorizeFilter
:如果您使用Razor Page 核心的味道 2.0,您可以添加全局过滤器,如下所示:
您也可以使用以下代码。这是使用类型而不是实例。
使用依赖注入,您可以解析策略对象。