代码之家  ›  专栏  ›  技术社区  ›  yamspog

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

  •  19
  • yamspog  · 技术社区  · 16 年前

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

    我很高兴我排除了这个错误,但它回避了一个问题:“这两种设置校长的方法有什么区别?”。还有其他的堆栈溢出 questions 但是他们没有深入了解这两种方法的细节。

    将HttpConext.Current.User用于所有 web(ASPX/ASMX)应用程序。

    将Thread.CurrentPrincipal用于所有 控制台和windows服务

    3 回复  |  直到 9 年前
        1
  •  6
  •   Aren    16 年前

    在一个webforms应用程序下我相信 Thread.CurrentPrincipal

    HttpContext.Current.User 将是当前登录的web用户。

    您是要伪装工作进程还是已登录的用户?

        2
  •  25
  •   womp    16 年前

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

    (如果您在Reflector中查看一下,您可以看到在HttpContext.User上执行“set”时运行的复杂代码—为了正确设置主体,它在IIS中做了很多内部工作。)

        3
  •  5
  •   Entwickler    7 年前

    这篇文章解释了吗?

    http://www.hanselman.com/blog/CommentView.aspx?guid=22c42b73-4004-40ce-8af9-47f1b9b434ed

    我在一个ASP.NET自定义表单中有一些代码用于身份验证登录

    // This principal will flow throughout the request.
    VoyagerPrincipal principal = new VoyagerPrincipal(yada, yada, yada);
    
    // Attach the new principal object to the current HttpContext object
    HttpContext.Current.User = principal;
    

    它被称为全球。asax的AuthenticateRequest所以一切都是 页面事件触发前的所有设置。它提供了一个自定义 将电子财务服务器与ASP.NET集成的原则。它是 很可爱,伊莫。

    i随时从当前线程中删除主线程。在另一部分 代码有人在HttpRequest的过程中这样做 第一次出现在上面:

    return Thread.CurrentPrincipal as VoyagerPrincipal;
    

    由HttpApplication填充的时间要早得多(或者 WindowsPrincipal,具体取决于您的设置)。