it-swarm.com.de

Eingebauter Helfer zum Analysieren von User.Identity.Name in Domäne\Benutzername

Gibt es ein integriertes Dienstprogramm oder einen Hilfsprogramm zum Analysieren von HttpContext.Current.User.Identity.Name, z. domain\user, um separat den Domänennamen zu erhalten, falls vorhanden und Benutzer?

Oder gibt es noch eine andere Klasse?

Ich verstehe, dass es sehr einfach ist, String.Split("\") anzurufen, aber einfach interessant

45
abatishchev

Dies ist besser ( einfacher zu verwenden, keine Gelegenheit für NullReferenceExcpetion und entspricht den MS-Codierungsrichtlinien zur Behandlung von leeren und null-Strings gleich ):

public static class Extensions
{
    public static string GetDomain(this IIdentity identity)
    {
        string s = identity.Name;
        int stop = s.IndexOf("\\");
        return (stop > -1) ?  s.Substring(0, stop) : string.Empty;
    }

    public static string GetLogin(this IIdentity identity)
    {
        string s = identity.Name;
        int stop = s.IndexOf("\\");
        return (stop > -1) ? s.Substring(stop + 1, s.Length - stop - 1) : string.Empty;
    }
}

Verwendungszweck:

IIdentity id = HttpContext.Current.User.Identity;
id.GetLogin();
id.GetDomain();

Dies erfordert einen C # 3.0-Compiler (oder neuer) und kein 3.0 .Net zum Arbeiten nach dem Kompilieren.

68
Aen Sidhe

System.Environment.UserDomainName gibt nur den Domänennamen an

Ebenso gibt Ihnen System.Environment.UserName nur den Benutzernamen an

13
StarCub
var components = User.Identity.Name.Split('\\');

var userName = components.Last() 

var domainName = components.Reverse().Skip(1).FirstOrDefault()
7
Gruff Bunny

Ihr Jungs könnte auch in Betracht ziehen, eine Zeichenkette wie "[email protected]" oder "user @ domain" zu analysieren.

Das mache ich gerade:
Wenn die Zeichenfolge '\' enthält, teilen Sie die Zeichenfolge unter '\' auf und extrahieren Sie den Benutzernamen und die Domäne
Andernfalls Wenn die Zeichenfolge '@' enthält, teilen Sie die Zeichenfolge bei '@' auf und extrahieren Sie Benutzername und Domäne
Sonst behandeln Sie String als Benutzernamen ohne Domäne

Ich suche immer noch nach einer besseren Lösung für den Fall, dass die Eingabezeichenfolge nicht in einem leicht vorhergesagten Format vorliegt, d. Ich denke RegEx ...

Update: Ich stehe korrigiert. Meine Antwort ist ein bisschen aus dem Kontext. Sie bezieht sich auf den allgemeinen Fall, in dem Benutzername und Domänen aus Benutzereingaben analysiert werden, wie in der Benutzeranmeldung/Anmeldeaufforderung. Hoffe es hilft noch jemandem.

4
Omar

Ich denke auch Nein, weil ich mir neulich die gleiche Frage gestellt habe: D

Du kannst es versuchen:

public static string GetDomain(string s)
{
    int stop = s.IndexOf("\\");
    return (stop > -1) ? s.Substring(0, stop + 1) : null;
}

public static string GetLogin(string s)
{
    int stop = s.IndexOf("\\");
    return (stop > -1) ? s.Substring(stop + 1, s.Length - stop - 1) : null;
}
4
inspite

Ich glaube nicht, weil System.Security.Principal.WindowsIdentity solche Mitglieder nicht enthält.

1
Aen Sidhe

Obwohl nicht in .NET integriert, kann man immer auf CredUIParseUserName zugreifen. Hier ist ein Beispiel für die Verwendung in .NET.

PS: Es scheint den "Punkt" nicht zu behandeln, wie in ".\Benutzername".

1
Mihai

Scheint wie ein Problem, das durch reguläre Ausdrücke gelöst werden muss

public static class UserExtensions
{
    public static string GetDomain(this IIdentity identity)
    {
        Regex.Match(identity.Name, ".*\\\\").ToString()
    }

    public static string GetLogin(this IIdentity identity)
    {
        return Regex.Replace(identity.Name, ".*\\\\", "");
    }
}
0
Adam Cooper