刚才我最近碰到运行一个asp.net web应用程序下的Visual Studio 2008年。我得到的错误“类型不解决的成员... customUserPrincipal”的问题。 追查各种讨论组,似乎有与Visual Studio的Web服务器的问题,当您分配对一个Thread.CurrentPrincipal中自定义主体。
在我的代码,我现在用的...
HttpContext.Current.User = myCustomPrincipal
//Thread.CurrentPrincipal = myCustomPrincipal
我很高兴我得到了错误的方式进行,但它回避了一个问题:“是什么设置本金这两种方法之间的区别?”。 还有其他计算器问题有关分歧,但他们不进入这两种方法的细节。
我没有找到一个诱人的职位,有以下宏伟的评论,但没有解释来支持他的说法...
使用HttpConext.Current.User为所有网络(ASPX / ASMX)应用。
使用为Thread.CurrentPrincipal中像的WinForms,控制台和Windows服务应用程序的所有其他应用程序。
你们中的任何安全/ dot.net大师可以一些关于这个问题的?
在一个web表单应用程序,我相信Thread.CurrentPrincipal
会是何人正在运行的工作进程(线程)的主体。
HttpContext.Current.User
将在Web的用户当前登录。
在表格/ WPF应用程序的情况下,它是有道理的,因为你下运行的应用程序的用户是你感兴趣的人。
你们是不是要伪装的工作进程或登录的用户?
当它获得一个线程HttpApplication对象所做的第一件事就是设置线程的委托人的HttpContext的主体。 此同步了校长。
但是,如果你去设置线程的主要后来,HttpApplication的内部仍然有不同的主要用户的上下文设置。 这就是为什么你应该总是通过HttpContext的设置。
(如果你把在反射器一看,你可以看到当你做一个在HttpContext.User中“设置”,运行复杂的代码 - 它做了很多与IIS内部的东西正确设置校长。)
请问这篇文章解释呢?
http://www.hanselman.com/blog/CommentView.aspx?guid=22c42b73-4004-40ce-8af9-47f1b9b434ed
下面是摘录:
我有一个ASP.NET的自定义FormsAuthentication登录,看起来像这样的代码:
// 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;
它也呼吁在Global.asax的AuthenticateRequest所以一切都是Page的事件触发之前的所有设置。 它提供了一个自定义的IPrincipal整合我们与ASP.NET eFinance服务器。 这是一个相当可爱的子系统,恕我直言。
其他操作指望能在任何时间从当前线程得到这个“调用上下文”的IPrincipal。 在代码中有人的另一部分是放在HttpRequest(在Page_Load某处)的中间刚刚叫上面的第一次例行后这样做:
return Thread.CurrentPrincipal as VoyagerPrincipal;
在有人呼叫代码的第一个块,然后希望能够调用相同的HttpRequest中的第二块的情况下,包含Thread.CurrentPrincipal中一个的GenericPrincipal由HttpApplication的要早得多填充。 (或者一个WindowsPrincipal,根据您的设置)。
文章来源: difference between http.context.user and thread.currentprincipal and when to use them?