734 Stimmen

Wie erhalte ich den aktuellen Benutzernamen in .NET mit C#?

Wie erhalte ich den aktuellen Benutzernamen in .NET mit C#?

0 Stimmen

Im Zusammenhang mit Impersonation kann der Benutzername ein anderer sein als der Benutzername der angemeldeten Benutzersitzung (z. B. Runas oder .Net-Impersonation in verwaltetem Code), siehe Kommentare anderer Benutzer weiter unten

1058voto

juan Punkte 76994

Option A)

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

Option B)

string userName = Environment.UserName

115 Stimmen

H Environment.UserName ?

1 Stimmen

T s

64 Stimmen

@SimonGillbee, das ist falsch, Environment.UserName gibt den Benutzer "RunAs" zurück.

386voto

Israel Margulies Punkte 8498

Wenn Sie sich in einem Netzwerk von Benutzern befinden, wird der Benutzername anders lauten:

Environment.UserName
- Will Display format : 'Username'

statt

System.Security.Principal.WindowsIdentity.GetCurrent().Name
- Will Display format : 'NetworkName\Username'

Wählen Sie das gewünschte Format.

10 Stimmen

Sie können verwenden Environment.UserDomainName + "\\" + Environment.UserName um scheinbar das gleiche Ergebnis zu erzielen wie System.Security.Principal.WindowsIdentity.GetCurrent().Name . Was ist der Unterschied, fragen Sie... Ich bin mir nicht sicher.

13 Stimmen

Ich brauchte den Benutzer, der die Anwendung ausführt, und nicht den, der angemeldet ist (Environment.UserName ist nicht das, was ich will), also habe ich das Folgende getan, um die Domäne zu entfernen: System.Security.Principal.WindowsIdentity.GetCurrent().Name.‌​Split( '\\' ).Last();

0 Stimmen

Sie müssen Folgendes hinzufügen ToArray() après Split vor dem Aufruf Last()

126voto

JaredPar Punkte 699699

Versuchen Sie die Eigenschaft: Environment.UserName .

6 Stimmen

Oder, string userName = Environment.UserName;

13 Stimmen

Vorsicht: wie Simon Gillbee in den Kommentaren der akzeptierten Antwort erwähnte, Environment.UsernName gibt den eingeloggten Kontonamen an, aber WindowsIdentity.GetCurrent().Name gibt den Kontonamen zurück, unter dem die Anwendung läuft.

5 Stimmen

@leo: Vorsicht! Auch diese Information ist offenbar falsch, siehe Bolu's Antwort . :-)

35voto

Kobus Punkte 351

Die Dokumentation für Environment.UserName scheint ein wenig widersprüchlich zu sein:

Environment.UserName Eigenschaft

Auf der gleichen Seite heißt es:

Ruft den Benutzernamen der Person ab, die derzeit am Windows-Betriebssystem angemeldet ist.

UND

zeigt den Benutzernamen der Person an, die das aktuelle Thema begonnen hat

Wenn Sie Environment.UserName mit RunAs testen, erhalten Sie den Namen des RunAs-Benutzerkontos und nicht den ursprünglich bei Windows angemeldeten Benutzer.

26voto

Shivam657 Punkte 723

Ich schließe mich den anderen Antworten voll und ganz an, möchte aber eine weitere Methode hervorheben, die besagt

String UserName = Request.LogonUserIdentity.Name;

Die obige Methode liefert mir den Benutzernamen im Format: Domänenname \UserName . Zum Beispiel, EUROPA \UserName

Das ist etwas anderes als:

String UserName = Environment.UserName;

die in dem Format angezeigt werden: Nutzername

Und schließlich:

String UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

die gab: NT AUTHORITY\IUSR (während die Anwendung auf dem IIS-Server läuft) und DomainName\UserName (während die Anwendung auf einem lokalen Server läuft).

0 Stimmen

Welcher Namensraum ist für die Verwendung von "Request." erforderlich?

3 Stimmen

@TK-421 Request funktioniert nur, wenn Sie eine Webanwendung sind. Es ist eine Instanz von System.Web.HttpRequest

0 Stimmen

@GerardoGrignoli - Danke für Ihren Kommentar, ja Request würde nur funktionieren, wenn Sie eine Webanwendung verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X