Tôi đã đọc rất nhiều câu hỏi và câu trả lời về chủ đề này, nhưng không có câu hỏi nào trong số họ đã giúp tôi giải quyết vấn đề này.IPrincipal tùy chỉnh không thể truy cập trong MVC5
Sự cố tôi gặp phải là thuộc tính HttpContext.Current.User
hoặc chỉ User
thuộc loại RolePrincipal
thay vì hiệu trưởng tùy chỉnh của tôi.
Đây là ứng dụng web MVC 5 sử dụng Xác thực Windows (ứng dụng chỉ mạng nội bộ). Hiệu trưởng tùy chỉnh của tôi là một lớp con của WindowsPrincipal
và tôi đã triển khai RoleProvider
của riêng mình để sử dụng trong thẻ thuộc tính ủy quyền.
Khi tôi cố gắng sử dụng hiệu trưởng bằng cách truyền cho hiệu trưởng tùy chỉnh của tôi từ IPrincipal
trên HttpContext hiện tại, tôi nhận được thông báo lỗi của loại RolePrincipal, điều này rõ ràng không thể được gửi cho hiệu trưởng tùy chỉnh của tôi. Tôi đang thiết yếu tùy chỉnh của tôi trong trường hợp Application_PostAuthenticationRequest
:
protected void Application_PostAuthenticationRequest(object sender, EventArgs e)
{
if (User == null)
return;
using(EntityContext db = new EntityContext())
{
var user = db.Users.SingleOrDefault(u => u.ADName.Equals(User.Identity.Name));
HttpContext.Current.User = new PcsPrincipal((WindowsIdentity)User.Identity, user);
}
}
Khi tôi đặt một breakpoint trong phương pháp mà nó dường như không bao giờ được gọi, mà có thể giải thích lý do tại sao nó không nhận được thiết lập để chính tùy chỉnh của tôi.
Tôi đã xem xét QA sau, nhưng họ đã không thể giải quyết vấn đề:
- using custom IPrincipal and IIdentity in MVC3 - Thêm việc đăng ký xử lý sự kiện trong phương pháp Init Global.asax.cs của. Dường như không tạo ra sự khác biệt. Ngoài ra, biến số
_application
dường như không hợp lệ trong MVC5. - RoleProvider dosn't work with custom IIdentity and IPrincipal on server - Thực hiện các thay đổi trong tệp web.config, nhưng điều này gây ra các lỗi khác nhau trong thời gian chạy có lỗi nói rằng đường dẫn ASP.NET được cấu hình không chính xác.
Tôi đang làm gì sai để không có bộ chính? Hãy cho tôi biết nếu cần thêm mã.
EDIT: Đặt HttpContext.Current.User thành hiệu trưởng tùy chỉnh của tôi trong sự kiện WindowsAuthentication.OnAuthenticate không giải quyết vấn đề này. Hành vi tương tự chính xác được trưng bày bằng phương pháp đó.
Hành vi tương tự được thể hiện bằng sự kiện 'WindowsAuthentication.OnAuthenticate'. – JNYRanger