嗯,我觉得标题够清楚了。
2 回答
最大的区别是它们不必相同。
一般来说,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
不是查询登录用户身份的最佳方式。您应该坚持Page.User
使用 WebForms、Controller.User
MVC 和ApiController.User
Web API。
另一个很大的区别是您的代码并不总是可以访问 HttpContext。(例如,如果您将所有 BL 放在一个程序集中,可能会或可能不会从 Web 应用程序中使用)虽然他们的两个用户帐户可能不同,但如果您使用 Thread.CurrentPrincipal 那么您的代码将始终能够获取无论您在代码中的哪个位置,都在该用户对象上。