在.NET核心控制台中获取当前用户
在.NET Core控制台应用程序(注意:不是ASP.NET Core!)中,如何获取当前用户?为了清楚起见,我正在寻找以前可用的Thread.CurrentPrincipal,它已经不存在了。在.NET核心控制台中获取当前用户,.net,.net-core,.net,.net Core,在.NET Core控制台应用程序(注意:不是ASP.NET Core!)中,如何获取当前用户?为了清楚起见,我正在寻找以前可用的Thread.CurrentPrincipal,它已经不存在了。 PlatformServices不包含此信息,环境也不包含此信息。了解。一个可能的选项是使用WindowsIdentity: WindowsIdentity.GetCurrent().Name 需要添加System.Security.Principal.Windows包。 当然,这仅适用于Window
PlatformServices不包含此信息,环境也不包含此信息。了解。一个可能的选项是使用WindowsIdentity:
WindowsIdentity.GetCurrent().Name
需要添加System.Security.Principal.Windows包。
当然,这仅适用于Windows
另一种选择是使用索赔:
ClaimsPrincipal.Current
为此,要添加的包是System.Security.Claims。在Windows中,默认情况下,标识为空。
System.Security.Principal.Windows
不可用,除非手动导入DLL。以下几点对我很有用:
Environment.UserName;
根据该报告,这一解决方案“在99%的情况下应该足够了。”
注意:确保您的目标是dotnetcore2.0
或更高版本,因为1.0
和1.1
没有此定义
编辑2019年1月22日:指向该方法旧源的链接已过时。将
System.Environment
移动到CoreLib
中居住。对于那些好奇的人,您仍然可以这样做,尽管建议它“在99%的情况下应该足够”的注释已被删除。如果您想重用IIdentity
抽象以通过中间层,请执行以下操作:
var identity = new GenericIdentity(Environment.UserDomainName + "\\" + Environment.UserName, "Anonymous");
核心2控制台应用程序中的注意事项:
ClaimsPrincipal.Current
和Thread.CurrentPrincipal
始终为空(除非您已经设置了它们),并且此代码也不会工作:
IPrincipal principal = new GenericPrincipal(identity, null);
AppDomain.CurrentDomain.SetThreadPrincipal(principal);
在此之后,
ClaimsPrincipal.Current
和Thread.CurrentPrincipal
仍然为空
WindowsIdentity.GetCurrent()
有效,但是应该有更多的理由引用System.Security.Principal.Window
然后获取“用户名”。我在字里行间听到的:ClaimsPrincipal是未来;)<代码>ClaimsPrincipal。当前在控制器中不起作用,它将为空。您需要访问HttpContext.User
属性,它实际上是一个ClaimsPrincipal
实例。很高兴知道。ClaimsPrinciple的静态API无论如何都没有多大意义。好消息。环境已重新添加到.NET核心。我在环境中似乎没有.UserName
,请确保您的目标是DotNetCore 2.0
或更高版本dotnetcore1.0
和dotnetcore1.1
似乎没有.UserName
.Cool适合我@Foxtrek_64是否要设置用户?因为我正在Linux服务器上部署它,并且希望将用户设置为服务帐户,以便将来阅读。对于GenericEntity的想法…注意自动魔法巫毒经验证设置为真!谢谢你的主意。这是查看伏都教的代码。(查找“公共覆盖布尔已验证”)