2017-02-01 3 views
10

В ASP.NET 4 и ниже мы просто добавим следующее в Global.asax:Как добавить глобальные фильтры в ASP.NET Core?

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

Любая идея, как сделать это в ASP.NET Ядра?

+0

ли вы проверить [документы] (https://docs.microsoft.com/en-us/aspnet/ ядро/MVC/контроллеры/фильтры # фильтр-телескопы и порядка, из-исполнения)? – tmg

+0

@tmg спасибо за это, кажется, что он не может быть введен в конвейер как «новый AuthorizeAttribute()» в основном, в отличие от предыдущих версий ASP.NET, теперь я ищу способ переноса вышеуказанного фильтр в ядре. – xird

ответ

16

От 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)); 
}); 
1

Вы также можете использовать код, приведенный ниже. Это использует тип, а не экземпляр.

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

И используя инъекцию зависимостей, вы можете разрешить объект политики.

0

В случае, если вы используете 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. 
     }); 

 Смежные вопросы

  • Нет связанных вопросов^_^