在.NET Core Console中获取当前用户

Ric*_*res 18 .net .net-core

在.NET Core控制台应用程序中(注意:不是ASP.NET Core!),如何获取当前用户?为了清楚起见,我正在寻找以前不再存在的Thread.CurrentPrincipal.PlatformServices不包含此信息,Environment也不包含此信息.

Ric*_*res 23

得到它了.可能的选择是使用WindowsIdentity:

WindowsIdentity.GetCurrent().Name
Run Code Online (Sandbox Code Playgroud)

有必要添加System.Security.Principal.Windows包.当然,这仅适用于Windows.

另一种选择是使用声明:

ClaimsPrincipal.Current
Run Code Online (Sandbox Code Playgroud)

为此,要添加的包是System.Security.Claims.在Windows中,默认情况下,标识将为空.


Fox*_*_64 10

System.Security.Principal.Windows除非您手动导入DLL,否则不可用.以下对我有用:

Environment.UserName;
Run Code Online (Sandbox Code Playgroud)

根据.NET Core System.Environment源代码,这个解决方案"应该足够99%的情况."

注意:请确保您定位DotNetCore 2.0或稍后定位,1.0并且1.1没有此定义.

编辑2019年1月22日:该方法的旧源的链接已过时.PR 34654搬到System.Environment了住CoreLib.对于那些好奇的阅读源代码的人来说,你可能仍然会这样做,尽管评论表明它"应该足够99%的情况"已被删除.

  • 确保你的目标是`DotNetCore 2.0`或更高版本.`DotNetCore 1.0`和`DotNetCore 1.1`似乎没有`.UserName`. (2认同)