2014-11-19 15 views
5

Tôi hiện đang làm việc với một số mã kế thừa trong đó thuộc tính HttpContext.Current.User được sử dụng trong phương pháp điều khiển MVC để thực hiện một số ủy quyền cơ bản trên người dùng hiện tại. Từ đọc tài liệu đó cũng là một tài sản HttpContext.User và cả hai dường như chỉ ra rằng họ có thể nhận/thiết lập người dùng hiện tại. Tôi tò mò nếu ở một số cấp họ có thể hoán đổi cho nhau và giống nhau, hoặc nếu có sự khác biệt chính giữa 2 điều đó sẽ gây ra các vấn đề không mong muốn về việc cho phép hoặc thậm chí nhận ra người dùng hiện tại của ứng dụng web.Sự khác nhau giữa HttpContext.Current.User và HttpContext.User

Trả lời

1

Các documentation loại giải thích này (nhấn mạnh thêm, và mặc dù điều này là đề cập đến hình thức web tôi tin rằng các nguyên tắc là như nhau trong MVC):

Bởi vì các trang ASP.NET chứa một tham chiếu mặc định cho System.Web không gian tên (có chứa lớp HttpContext), bạn có thể tham chiếu các thành viên của HttpContext trên trang .aspx mà không sử dụng đầy đủ tham chiếu lớp đủ điều kiện để HttpContext. Ví dụ: bạn có thể sử dụng User.Identity.Name để nhận tên của người dùng thay mặt cho số điện thoại hiện đang chạy.

Tuy nhiên, nếu bạn muốn sử dụng các thành viên của IPrincipal từ một ASP.NET mô-đun mã phía sau, bạn phải bao gồm một tham chiếu đến không gian tên System.Web trong module và một tài liệu tham khảo đầy đủ đủ điều kiện để cả hai yêu cầu hiện đang hoạt động/phản ứng bối cảnh và lớp trong System.Web mà bạn muốn sử dụng

Ví dụ, trong code-behind trang bạn phải ghi rõ tên đầy đủ HttpContext.Current.User.Identity .Tên.

1

Cả hai HttpContext.Current và HttpContext đều giống như đối tượng httpContext trả lại cho yêu cầu HTTP hiện tại.
Nhưng sau đó là thuộc tính của đối tượng bộ điều khiển, vì vậy nó chỉ có sẵn trong bộ điều khiển.

0

Bạn không thể trực tiếp tham khảo HttpContext.User, ngoại trừ có lẽ bên trong bộ điều khiển. User là thuộc tính của lớp HttpContext. Bạn có thể làm một cái gì đó như thế này:

HttpContext context = HttpContext.Current; 
IPrincipal user = context.User; 

có nghĩa là, bạn có thể tham khảo tài sản thông qua một trường hợp của lớp HttpContext.

Lớp cơ sở Controller có thuộc tính có tên HttpContext. Bên trong bộ điều khiển, nếu bạn tham khảo HttpContext.User, bạn đang tham chiếu base.HttpContext.User, thường sẽ là (luôn luôn?) Giống như HttpContext.Current.User, đơn giản vì base.HttpContext nói chung (có thể luôn luôn?) Giống như HttpContext.Current.

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