2017-02-01 2 views
10

In ASP.NET 4 und unten wir fügen Sie einfach die folgende in Global.asax:Wie füge ich globale Filter in ASP.NET Core hinzu?

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

Jede Idee, wie dieser Kern in ASP.NET zu tun?

+0

Haben Sie überprüfen Sie die [docs] (https://docs.microsoft.com/en-us/aspnet/ core/mvc/controllers/filters # filter-scopes-und-order-of-execution)? – tmg

+0

@tmg Vielen Dank für dieses eine, es scheint, dass es nicht in der Pipeline als "new AuthorizeAttribute()" im Kern im Gegensatz zu den vorherigen ASP.NET-Versionen injiziert werden kann, bin ich jetzt auf der Suche nach einer Möglichkeit, die oben genannten zu migrieren Filter im Kern. – xird

Antwort

16

Von docs:

Sie einen Filter global registrieren können (für alle Controller und Aktionen) indem sie sie an die MvcOptions.Filters Sammlung in der ConfigureServices Methode in der Startup Klasse hinzufügen:

Sie können AuthorizeAttribute nicht in MvcOptions.Filters einfügen. Erstellen Sie ein AuthorizationPolicy und verwenden AuthorizeFilter:

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

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

Sie auch den Code unten verwenden können. Dies verwendet einen Typ und keine Instanz.

Und mithilfe von Dependency Injection können Sie das Richtlinienobjekt auflösen.

0

Im Fall, wenn Sie verwenden die Razor Page flavor of the ASP.NET Core 2.0 Sie globale Filter hinzufügen könnte wie folgt:

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