2017-02-01 18 views
10

Trong ASP.NET 4 và dưới đây chúng ta chỉ cần thêm như sau trong Global.asax:Làm thế nào để thêm bộ lọc toàn cầu trong ASP.NET Core?

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

Bất kỳ ý tưởng làm thế nào để làm điều này trong ASP.NET Core?

+0

Bạn có kiểm tra [tài liệu] (https://docs.microsoft.com/en-us/aspnet/ core/mvc/controllers/filters # filter-scope-and-order-of-execution)? – tmg

+0

@tmg cảm ơn bạn vì điều này, có vẻ như nó không thể được tiêm vào đường ống như "mới AuthorizeAttribute()" trong lõi không giống như trong các phiên bản ASP.NET trước, tôi đang tìm cách để di chuyển trên bộ lọc trong lõi. – xird

Trả lời

16

Từ docs:

Bạn có thể đăng ký một bộ lọc trên toàn cầu (đối với tất cả các bộ điều khiển và hành động) bằng cách thêm vào bộ sưu tập MvcOptions.Filters trong phương pháp ConfigureServices trong lớp Startup:

Bạn không thể thêm AuthorizeAttribute vào MvcOptions.Filters. Tạo một số AuthorizationPolicy và sử dụng AuthorizeFilter:

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

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

Bạn cũng có thể sử dụng mã bên dưới. Điều này đang sử dụng một loại chứ không phải là một thể hiện.

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

Và sử dụng Dependency Injection bạn có thể giải quyết Object chính sách.

0

Trong trường hợp nếu bạn đang sử dụng Razor Page flavor of the ASP.NET Core 2.0 bạn có thể thêm các bộ lọc toàn cầu như sau:

services.AddMvc() 
.AddRazorPagesOptions(options => 
     { 
      options.Conventions.AuthorizeFolder("/"); // Require users to be authenticated. 
      options.Conventions.AuthorizeFolder("/", "YourPolicyName"); // Require a policy to be full filled globally. 
     }); 
Các vấn đề liên quan