嗯,我觉得标题很清楚。
答案 0 :(得分:12)
最大的区别在于它们不必相同。
一般来说,HttpContext.Current.User
是登录用户(在工作线程上调用时),而Thread.CurrentPrincipal
是工作进程标识。
在IIS 5.x上,Thread.CurrentPrincipal
默认为ASPNET
。在IIS 6及更高版本上,Thread.CurrentPrincipal
默认为Network Service
(或您更改为的应用程序池标识)。
要使其复杂化,如果启用ASP.NET模拟,则它们都可能与登录用户相同。
尝试阅读有关此主题和Microsoft MSDN文章的一些非常好的书籍,
http://msdn.microsoft.com/en-us/library/ms998351.aspx
另一个建议是使用调试器附加到工作进程并在运行时检查它们。这可以让你看起来更好。
请注意,
HttpContext.Current.User
不是查询的最佳方式 登录用户身份。对于WebForms,你应该坚持Page.User
MVC为Controller.User
,Web API为ApiController.User
。
答案 1 :(得分:2)
另一个很大的区别是你的代码并不总是能够访问HttpContext。 (例如,如果您的所有BL都在一个程序集中,可能会或可能不会从Web应用程序中使用)虽然它们的两个用户帐户可能不同,但如果您使用Thread.CurrentPrincipal,那么您的代码将始终能够获得无论您在代码中的哪个位置,都可以访问该用户对象。