В ASP.NET 4 и ниже мы просто добавим следующее в Global.asax:Как добавить глобальные фильтры в ASP.NET Core?
GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });
Любая идея, как сделать это в ASP.NET Ядра?
В ASP.NET 4 и ниже мы просто добавим следующее в Global.asax:Как добавить глобальные фильтры в ASP.NET Core?
GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });
Любая идея, как сделать это в ASP.NET Ядра?
От docs:
Вы можете зарегистрировать фильтр глобально (для всех контроллеров и действий) , добавив его в
MvcOptions.Filters
коллекции в методеConfigureServices
вStartup
классе:
Вы не можете добавить AuthorizeAttribute
в MvcOptions.Filters
. Создание AuthorizationPolicy
и использовать AuthorizeFilter
:
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireRole("Admin", "SuperUser")
.Build();
services.AddMvc(options =>
{
options.Filters.Add(new AuthorizeFilter(policy));
});
Вы также можете использовать код, приведенный ниже. Это использует тип, а не экземпляр.
services.AddMvc(options =>
{
options.Filters.Add(typeof(AuthorizeFilter));
});
И используя инъекцию зависимостей, вы можете разрешить объект политики.
В случае, если вы используете Razor Page flavor of the ASP.NET Core 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.
});
ли вы проверить [документы] (https://docs.microsoft.com/en-us/aspnet/ ядро/MVC/контроллеры/фильтры # фильтр-телескопы и порядка, из-исполнения)? – tmg
@tmg спасибо за это, кажется, что он не может быть введен в конвейер как «новый AuthorizeAttribute()» в основном, в отличие от предыдущих версий ASP.NET, теперь я ищу способ переноса вышеуказанного фильтр в ядре. – xird