In un'applicazione console .NET Core (nota: non in ASP.NET Core!), Come posso ottenere l'utente corrente? Per essere chiari, sto cercando quello che era disponibile come Thread.CurrentPrincipal, che non esiste più. PlatformServices non contiene queste informazioni e nemmeno Ambiente.Ottenere l'utente corrente in .NET Core Console
risposta
Capito. Un'opzione possibile è quella di utilizzare WindowsIdentity:
WindowsIdentity.GetCurrent().Name
E 'necessario aggiungere il pacchetto System.Security.Principal.Windows. Ovviamente, questo è solo per Windows.
Un'altra opzione è quella di utilizzare Reclami:
ClaimsPrincipal.Current
Per questo, il pacchetto da aggiungere è System.Security.Claims. In Windows, per impostazione predefinita, l'identità sarà vuota.
System.Security.Principal.Windows
non disponibile se non si importa manualmente la DLL. Di seguito ha lavorato per me:
Environment.UserName;
Secondo il .NET Core System.Environment Source Code, questa soluzione "dovrebbe essere sufficiente nel 99% dei casi."
Nota: assicurarsi di avere come target DotNetCore 2.0
o successivo come 1.0
e 1.1
non avere questa definizione.
Non sembra che abbia un '.UserName' in' Ambiente' –
Assicurati di scegliere come target 'DotNetCore 2.0' o successivo. 'DotNetCore 1.0' e' DotNetCore 1.1' non sembrano avere '.UserName'. –
Se si desidera riutilizzare IIdentity
astrazione di passare attraverso il vostro strato intermedio fare questo:
var identity = new GenericIdentity(Environment.UserDomainName + "\\" + Environment.UserName, "Anonymous");
P.S. nel nucleo 2 console app: ClaimsPrincipal.Current
e Thread.CurrentPrincipal
sono sempre nullo (se non si dispone di installazione loro) e questo codice non funziona nemmeno:
IPrincipal principal = new GenericPrincipal(identity, null);
AppDomain.CurrentDomain.SetThreadPrincipal(principal);
dopo questo ClaimsPrincipal.Current
e Thread.CurrentPrincipal
sono ancora nullo.
WindowsIdentity.GetCurrent()
funziona, ma ci dovrebbero essere motivi più forti per fare riferimento a System.Security.Principal.Window
quindi ottenere il "nome utente".
Quello che sento tra le righe: ClaimsPrincipal è il futuro;) – Thomas
'ClaimsPrincipal.Current' * non * funziona in un controller, sarà nullo. È necessario accedere alla proprietà 'HttpContext.User', che sarà in effetti un'istanza' ClaimsPrincipal'. –
Buono a sapersi. Un'API statica per ClaimsPrinciple non ha comunque molto senso. – Thomas