asp.net中的HttpContext.Current.User和Thread.CurrentPrincipal有什么区别?

时间:2009-12-03 22:04:39

标签: asp.net iprincipal

嗯,我觉得标题很清楚。

2 个答案:

答案 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,那么您的代码将始终能够获得无论您在代码中的哪个位置,都可以访问该用户对象。