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

10
我认为标题已经足够清楚了。
2个回答

12

最大的区别是它们不需要相同。

一般而言,HttpContext.Current.User 是登录用户(在工作线程上调用时),而 Thread.CurrentPrincipal 是工作进程的标识身份。

在 IIS 5.x 上,默认情况下 Thread.CurrentPrincipalASPNET。在 IIS 6 及以上版本中,默认情况下 Thread.CurrentPrincipalNetwork Service(或您更改为的应用程序池标识)。

让事情变得更复杂的是,如果启用了 ASP.NET 模拟,则它们两个可能与登录用户相同。

建议阅读关于此主题的一些优秀书籍和 Microsoft MSDN 文章,

http://msdn.microsoft.com/zh-cn/library/ms998351.aspx

另一个建议是使用调试器附加到工作进程并在运行时检查它们,这可以让您有一个更好的了解。

请注意,HttpContext.Current.User 不是查询登录用户身份的最佳方法。对于 WebForms,请使用 Page.User,对于 MVC,请使用 Controller.User,对于 Web API,请使用 ApiController.User


2

另一个重要的区别是,您的代码并不总是可以访问HttpContext。(例如,如果您将所有业务逻辑放在可能或可能不会从Web应用程序使用的程序集中)虽然这两个用户帐户可能不同,但如果您使用Thread.CurrentPrincipal,则您的代码将始终能够在代码的任何位置获取该用户对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接