36

Làm cách nào để buộc/đặt ủy quyền toàn cầu cho tất cả các hành động trong MVC Core?MVC Core Làm cách nào để buộc/đặt ủy quyền toàn cầu cho tất cả các hành động?

Tôi biết làm thế nào để đăng ký bộ lọc toàn cầu - ví dụ tôi có:

Setup.cs 

services.AddMvc(options => 
{ 
    options.Filters.Add(new RequireHttpsAttribute()); 
}); 

và điều này hoạt động tốt, nhưng tôi không thể thêm tương tự cho Authorize:

options.Filters.Add(new AuthorizeAttribute());

Tôi gặp lỗi:

Cannot convert from 'Microsoft.AspNet.Authorization.AuthorizeAttribute()' to 'System.Type'

(Phương pháp .Add() cần IFilterMetadata loại)


Tôi biết - từ câu hỏi tương tự - rằng đây hoạt động trên MVC4-5 ... Vì vậy, một cái gì đó phải thay đổi trên MVC Core ...

người có bất kỳ ý tưởng?

Trả lời

68
services.AddMvc(config => 
{ 
    var policy = new AuthorizationPolicyBuilder() 
        .RequireAuthenticatedUser() 
        .Build(); 
    config.Filters.Add(new AuthorizeFilter(policy)); 
}); 
+0

Cảm ơn bạn đã trả lời :) –

+0

Hãy để tôi hỏi - theo ý kiến ​​của bạn - đó là thực tiễn tốt? Tôi phải làm WebApp để sử dụng nội bộ, và tôi cần chắc chắn rằng không thể truy cập được cho công chúng. –

+0

Có lẽ một câu hỏi nữa - giải pháp đó (toàn cầu) có thể có bất kỳ tác động tiêu cực nào ví dụ về hiệu suất (so với việc sử dụng AuthorizeAttribute cho mọi lớp) không? –

Các vấn đề liên quan