In einer .NET Core-Konsolenanwendung (Anmerkung: nicht ASP.NET Core!), Wie kann ich den aktuellen Benutzer abrufen? Um es klar zu sagen, ich suche nach was früher als Thread.CurrentPrincipal verfügbar war, welches nicht mehr existiert. PlatformServices enthält diese Informationen nicht und auch Environment nicht.Aktuellen Benutzer in .NET Core Console erhalten
Antwort
Verstanden. Eine mögliche Option ist Windows zu verwenden:
WindowsIdentity.GetCurrent().Name
Es ist notwendig, das System.Security.Principal.Windows Paket hinzuzufügen. Natürlich ist dies nur für Windows.
Eine weitere Option ist Ansprüche zu verwenden:
ClaimsPrincipal.Current
Dafür das Paket hinzuzufügen ist System.Security.Claims. In Windows ist die Identität standardmäßig leer.
System.Security.Principal.Windows
ist nur verfügbar, wenn Sie die DLL manuell importieren. Die folgenden für mich gearbeitet:
Environment.UserName;
Nach der .NET Core System.Environment Source Code diese Lösung „in 99% der Fälle ausreichen.“
Hinweis: Achten Sie darauf, dass Sie die Ausrichtung DotNetCore 2.0
oder später haben, da 1.0
und 1.1
diese Definition nicht haben.
Ich habe anscheinend keinen ".UserName" in "Environment" –
Stellen Sie sicher, dass Sie auf 'DotNetCore 2.0' oder später abzielen. 'DotNetCore 1.0' und' DotNetCore 1.1' scheinen nicht '.UserName' zu haben. –
Wenn Sie IIdentity
Abstraktion, um durch Ihre mittlere Schicht tun dies wieder verwenden wollen:
var identity = new GenericIdentity(Environment.UserDomainName + "\\" + Environment.UserName, "Anonymous");
P. S. in Kern 2 Konsole App: ClaimsPrincipal.Current
und Thread.CurrentPrincipal
sind immer null (es sei denn, Sie Setup sie haben), und dieser Code wird entweder nicht:
IPrincipal principal = new GenericPrincipal(identity, null);
AppDomain.CurrentDomain.SetThreadPrincipal(principal);
danach ClaimsPrincipal.Current
und Thread.CurrentPrincipal
noch null sind.
WindowsIdentity.GetCurrent()
funktioniert, aber es sollte mehr Gründe geben, zu referenzieren System.Security.Principal.Window
dann erhalten Sie den "Benutzernamen".
- 1. Ausführen einer .NET Core Console-Anwendung unter Mac oder Windows
- 2. Verwenden von Httpclient mit .NET Core Console Anwendung
- 3. Fallen, um aktuellen Benutzer in Core Data zu speichern
- 4. Advanced Console IO in .NET
- 5. SVN Console .NET Fehler
- 6. SharePoint 2013 erhalten aktuellen Benutzer mit JavaScript
- 7. Erhalten von Facebook-Benutzer in Asp. NET
- 8. Erhalte aktuellen Benutzer in DotNetNuke
- 9. ASP.NET Core Authentifizierung von Clients (Console/WPF)
- 10. Asp.Net Core Middleware-Dienst abhängig von aktuellen Benutzer
- 11. So erhalten Sie den aktuellen Windows-Benutzer mit ASP.NET Core RC2 MVC6 und IIS7
- 12. System.Environment in .NET Core 1.0
- 13. RNGCryptoServiceProvider in .Net Core
- 14. .NET Console Anwendung Tab Fertigstellung
- 15. Django: So erhalten Sie den aktuellen Benutzer in Admin-Formularen
- 16. Laravel - So erhalten Sie aktuellen Benutzer in AppServiceProvider
- 17. Erhalten Sie alle Ergebnisse, die mit aktuellen Benutzer in Parse
- 18. MongoDB + .NET Core 1.0?
- 19. Benutzereigenschaft des angemeldeten Benutzers in .NET Core
- 20. SharePoint erhalten aktuellen Benutzerkontoname?
- 21. Analog System.Dynamic.ExpandoObject in .NET Core
- 22. Analog System.Security.Permissions in .NET Core
- 23. Rss-Parsing in .NET Core
- 24. WebUtility.HtmlDecode Ersatz in .NET Core
- 25. Crossgen Kompilierung in .NET Core
- 26. TextFieldParser Ersatz in .net Core 1
- 27. Systemspezifischen Zeilenumbruch erhalten in .net
- 28. .net-core Dependency Injection
- 29. IronPython für .NET Core
- 30. .NET Core Dynamic Compilation
Was ich zwischen den Zeilen höre: ClaimsPrincipal ist die Zukunft;) – Thomas
'ClaimsPrincipal.Current' wird * nicht * in einem Controller arbeiten, wird es null sein. Sie müssen auf die Eigenschaft "HttpContext.User" zugreifen, die tatsächlich eine ClaimsPrincipal-Instanz ist. –
Gut zu wissen. Eine statische API für ClaimsPrincipe macht sowieso keinen Sinn. – Thomas