gpt4 book ai didi

c# - http.context.user 和 thread.currentprincipal 之间的区别以及何时使用它们?

转载 作者:IT王子 更新时间:2023-10-29 04:42:36 26 4
gpt4 key购买 nike

我最近遇到了在 visual studio 2008 下运行 asp.net web 应用程序的问题。我收到错误“type is not resolved for member...customUserPrincipal”。追踪各种讨论组发现,当您针对 Thread.CurrentPrincipal 分配自定义主体时,Visual Studio 的 Web 服务器似乎存在问题。

在我的代码中,我现在使用...

HttpContext.Current.User = myCustomPrincipal
//Thread.CurrentPrincipal = myCustomPrincipal

我很高兴我排除了错误,但它回避了“这两种设置委托(delegate)人的方法有什么区别?”的问题。 stackoverflow还有其他questions与差异相关,但他们没有深入了解这两种方法的细节。

我确实找到了一个诱人的帖子,其中有以下夸张的评论,但没有任何解释来支持他的断言......

Use HttpConext.Current.User for all web (ASPX/ASMX) applications.

Use Thread.CurrentPrincipal for all other applications like winForms, console and windows service applications.

安全/.net 专家中的任何人都可以阐明这个主题吗?

最佳答案

HttpApplication 对象在获取线程时所做的第一件事是将线程的主体设置为 HttpContext 的主体。这会同步主体。

但是,如果您稍后去设置 Thread 的主体,则 HttpApplication 内部仍然为用户上下文设置不同的主体。这就是为什么您应该始终通过 HttpContext 设置它。

(如果您查看 Reflector,您会看到在 HttpContext.User 上执行“设置”时运行的复杂代码 - 它使用 IIS 执行大量内部操作以正确设置主体。)

关于c# - http.context.user 和 thread.currentprincipal 之间的区别以及何时使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3057937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com