在.NET核心控制台中获取当前用户

在.NET核心控制台中获取当前用户,.net,.net-core,.net,.net Core,在.NET Core控制台应用程序(注意:不是ASP.NET Core!)中,如何获取当前用户?为了清楚起见,我正在寻找以前可用的Thread.CurrentPrincipal,它已经不存在了。 PlatformServices不包含此信息,环境也不包含此信息。了解。一个可能的选项是使用WindowsIdentity: WindowsIdentity.GetCurrent().Name 需要添加System.Security.Principal.Windows包。 当然,这仅适用于Window

在.NET Core控制台应用程序(注意:不是ASP.NET Core!)中,如何获取当前用户?为了清楚起见,我正在寻找以前可用的Thread.CurrentPrincipal,它已经不存在了。
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的想法…注意自动魔法巫毒经验证设置为真!谢谢你的主意。这是查看伏都教的代码。(查找“公共覆盖布尔已验证”)