10

嗯,我觉得标题够清楚了。

4

2 回答 2

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不是查询登录用户身份的最佳方式。您应该坚持Page.User使用 WebForms、 Controller.UserMVC 和ApiController.UserWeb API。

于 2009-12-03T22:18:09.190 回答
2

另一个很大的区别是您的代码并不总是可以访问 HttpContext。(例如,如果您将所有 BL 放在一个程序集中,可能会或可能不会从 Web 应用程序中使用)虽然他们的两个用户帐户可能不同,但如果您使用 Thread.CurrentPrincipal 那么您的代码将始终能够获取无论您在代码中的哪个位置,都在该用户对象上。

于 2009-12-04T14:32:01.363 回答