2017-02-01 11 views
10

W ASP.NET 4 i poniżej po prostu dodaj następującą w Global.asax:Jak dodać filtry globalne w środowisku ASP.NET Core?

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

jakiś pomysł jak to zrobić w ASP.NET Rdzenia?

+0

Czy sprawdzić [DOCS] (https://docs.microsoft.com/en-us/aspnet/ core/mvc/controllers/filters # filter-scopes-and-order-of-execution)? – tmg

+0

@ tmg dziękuję za ten, wydaje się, że nie można go wstrzyknąć do potoku jako "new AuthorizeAttribute()" w rdzeniu w przeciwieństwie do poprzednich wersji ASP.NET, teraz szukam sposobu na migrację powyższego filtr w rdzeniu. – xird

Odpowiedz

16

Od docs:

Można zarejestrować filtr globalnie (dla wszystkich kontrolerów i działań) przez dodanie go do kolekcji MvcOptions.Filters w metodzie ConfigureServices w klasie Startup:

Nie można dodać AuthorizeAttribute do MvcOptions.Filters. Załóż AuthorizationPolicy i używać AuthorizeFilter:

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

services.AddMvc(options => 
{ 
    options.Filters.Add(new AuthorizeFilter(policy)); 
}); 
1

Można również użyć poniższy kod. Wykorzystuje typ, a nie instancję.

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

Za pomocą Dependency Injection można rozwiązać obiekt zasad.

0

W przypadku, gdy jesteś przy użyciu Razor Page flavor of the ASP.NET Core 2.0 można dodać filtry globalne następująco:

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