Ich muss den Benutzernamen mit C# programmatisch finden. Insbesondere möchte ich den System-/Netzwerkbenutzer an den aktuellen Prozess anhängen. Ich schreibe eine Webanwendung, die Windows integrierte Sicherheit verwendet.Wie finden Sie den Benutzernamen/Identität in C#
Antwort
Hängt vom Kontext der Anwendung ab. Sie können Environment.UserName (Konsole) oder HttpContext.Current.User.Identity.Name (Web) verwenden. Beachten Sie, dass Sie bei Verwendung der integrierten Windows-Authentifizierung möglicherweise die Domäne aus dem Benutzernamen entfernen müssen. Außerdem können Sie den aktuellen Benutzer mithilfe der Benutzereigenschaft der Seite in Codebehind abrufen, anstatt ihn aus dem aktuellen HTTP-Kontext zu referenzieren.
Die abstrahierte Darstellung der Identität ist oft die IPrincipal
/IIdentity
:
IPrincipal principal = Thread.CurrentPrincipal;
IIdentity identity = principal == null ? null : principal.Identity;
string name = identity == null ? "" : identity.Name;
Dies ist der gleiche Code ermöglicht es in vielen verschiedenen Modellen (winform, asp.net, wcf, etc.) zu arbeiten - aber es stützt sich auf Die Identität wird im Voraus festgelegt (da sie anwendungsdefiniert ist). Zum Beispiel in einem winform können Sie das aktuelle Benutzerfenster Identität verwenden:
Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
Jedoch kann der Auftraggeber auch vollständig maßgeschneiderte sein - es muss nicht unbedingt auf Windows beziehen Konten usw. Eine andere App könnte einen Login-Bildschirm verwenden willkürlicher Benutzern zu ermöglichen, sich anzumelden:
string userName = "Fred"; // todo
string[] roles = { "User", "Admin" }; // todo
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(userName), roles);
Eine kleine Zugabe. In einigen Fällen möchten Sie möglicherweise einen [Standard-Principal] (https://msdn.microsoft.com/en-us/library/system.appdomain.setthreadprincipal (v = vs.110) .aspx) für Threads Ihrer Anwendung festlegen Domain. Dies kann wie folgt geschehen: 'AppDomain.CurrentDomain.SetThreadPrincipal (myPrincipal);' – Korli
string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name ;
Während dieser Codeblock die Frage beantworten könnte, wäre es am besten, wenn Sie eine Erklärung dafür liefern könnten, warum dies der Fall ist. – DavidPostill
- 1. Wie finden Sie den nächsten August? C#
- 2. Wie finden Sie den Socket-Verbindungsstatus in C?
- 3. Finden Sie den Index des Elements C#
- 4. Wie finden Sie den Deadlock?
- 5. Wie finden Sie den Paketverlust in Wireshark?
- 6. Wie finden Sie den Standard-Webbrowser mit C#?
- 7. Finden Sie Funktion in C++
- 8. Finden Sie den dritten Punkt
- 9. Wie finden Sie den Seriennamen mit VBA?
- 10. Wie finden Sie den vorherigen Merge-Commit?
- 11. Wie finden Sie den benutzerdefinierten Installationspfad in Inno Setup?
- 12. So finden Sie den Kollisionsort
- 13. Finden Sie den Ordner Vagrantfile
- 14. Finden Sie den Maximalwert in einem Wörterbuch
- 15. So finden Sie den oauth_verifier in Magento
- 16. Finden Sie den Modus in Array
- 17. Wie erhalten Sie den Verzeichniszugriffstyp in C#?
- 18. So finden Sie den Rückgabetyp in VBA
- 19. Finden Sie den kürzesten Weg zwischen mehreren Standorten C#
- 20. kann C/C++ in den Projekteigenschaften nicht finden
- 21. Wie finden Sie den übergeordneten Methodennamen in mehreren Untermethoden in C#?
- 22. Wie finden Sie wiederkehrende Wortgruppen in Text mit C#?
- 23. So finden Sie Leistungsengpässe in C++ - Code
- 24. Wie finden Sie den aktuellen Benutzer in einer Windows-Umgebung?
- 25. Wie finden Sie den Unterschied zwischen 2 Strings in PHP?
- 26. Wie finden Sie den Clusternamen in Hadoop-Umgebung?
- 27. Wie finden Sie Top SQL in den letzten 5 Minuten?
- 28. Wie finden Sie den gleichen Wochentag letztes Jahr in SQL?
- 29. Wie finden Sie den nächsten Tag der Woche in PHP?
- 30. C# den größten gemeinsamen Teiler finden
Ihre Frage zu vage ist. Versuchen Sie, eine SQL-Abfrage zu schreiben? Verwenden Sie eine API? Informationen aus Active Directory abrufen? Bitte erklären Sie _exactly_, was Sie erreichen möchten. – Juliet
Sorry, ich bearbeite die Frage, um genauer zu sein. – minty