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
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.
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.
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
.
- 1. Sự khác nhau giữa HttpContext.Current.User và Thread.CurrentPrincipal trong asp.net là gì?
- 2. Sự khác nhau giữa .Equals và ==
- 3. Sự khác nhau giữa% w và% W
- 4. Sự khác nhau giữa ParameterInfo.DefaultValue và ParameterInfo.RawDefaultValue
- 5. Sự khác nhau giữa MBean và MXBean
- 6. Sự khác nhau giữa ConfigurationManager và ConfigurationSettings
- 7. Sự khác nhau giữa Tkinter và Tkinter
- 8. Sự khác nhau giữa! = Và =! trong Java?
- 9. Sự khác nhau giữa 'SpecialFolder.LocalApplicationData' và 'SpecialFolder.ApplicationData'?
- 10. Sự khác nhau giữa String.getBytes() và IOUtils.toByteArray()?
- 11. Sự khác nhau giữa presentModalViewController và presentViewController?
- 12. Sự khác nhau giữa NSInvocationOperation và NSBlockOperation
- 13. Sự khác nhau giữa TVar và TMVar
- 14. Sự khác nhau giữa onClickListener và onItemClickListener
- 15. Sự khác nhau giữa QPushButton và QToolButton
- 16. Sự khác nhau giữa ngStorage và $ window.localStorage
- 17. Sự khác nhau giữa okhttp và httpurlconnection?
- 18. Sự khác nhau giữa clBLAS và ViennaCL?
- 19. Sự khác nhau giữa JSONParser và JSONRenderer
- 20. Sự khác nhau giữa băm và hashValue
- 21. Sự khác nhau giữa hàm và Function.prototype
- 22. Sự khác nhau giữa express.Router và app.get?
- 23. Sự khác nhau giữa MPI_Scatter và MPI_Bcast
- 24. Sự khác nhau giữa JWT và SAML?
- 25. Sự khác nhau giữa onResume() và onResumeFragments()
- 26. Sự khác nhau giữa `require` và` gem`
- 27. Sự khác nhau giữa HttpUtility.HtmlEncode và Server.HtmlEncode
- 28. Sự khác nhau giữa sqlplus và sqldeveloper?
- 29. Sự khác nhau giữa JPA và JPA2
- 30. Sự khác nhau giữa DECIMAL và NUMERIC