Assistant intégré pour parsingr User.Identity.Name dans Domain \ Username

Existe-t-il un utilitaire ou un utilitaire HttpContext.Current.User.Identity.Name pour parsingr HttpContext.Current.User.Identity.Name , par exemple domain\user pour obtenir séparément le nom de domaine s’il existe et l’utilisateur?

Ou y a-t-il une autre classe pour le faire?

Je comprends que c’est très facile d’appeler Ssortingng.Split("\") mais juste intéressant

    C’est mieux ( plus facile à utiliser, aucune opportunité de NullReferenceExcpetion et conforme aux directives de codage MS sur le traitement égal des chaînes vides et nulles ):

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

    Usage:

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

    Cela nécessite le compilateur C # 3.0 (ou plus récent) et ne nécessite pas 3.0 .Net pour travailler après la compilation.

    System.Environment.UserDomainName vous donne le nom de domaine uniquement

    De même, System.Environment.UserName vous donne uniquement le nom d’utilisateur

     var components = User.Identity.Name.Split('\\'); var userName = components.Last() var domainName = components.Reverse().Skip(1).FirstOrDefault() 

    Vous pouvez aussi envisager d’parsingr une entrée de chaîne telle que “user@company.com” ou “user @ domain”.

    C’est ce que je fais actuellement:
    Si la chaîne contient ‘\’ alors divisez la chaîne à ‘\’ et extrayez le nom d’utilisateur et le domaine
    Else Si la chaîne contient ‘@’, divisez ensuite la chaîne à ‘@’ et extrayez le nom d’utilisateur et le domaine
    Sinon, traiter la chaîne comme nom d’utilisateur sans domaine

    Je suis toujours à la recherche d’une meilleure solution dans le cas où la chaîne d’entrée n’est pas dans un format facilement prévisible, par exemple “domaine \ utilisateur @ domaine”. Je pense à RegEx …

    Mise à jour: je suis corrigé. Ma réponse est un peu hors contexte, elle fait référence au cas général de l’parsing syntaxique du nom d’utilisateur et des domaines en dehors des entrées utilisateur, comme dans l’invite de connexion / connexion de l’utilisateur. J’espère que ça aide encore quelqu’un.

    Je pense non aussi, car je me suis posé la même question l’autre jour: D

    Tu peux essayer:

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

    Je ne le pense pas, car System.Security.Principal.WindowsIdentity ne contient pas de tels membres.

    Bien que ce ne soit pas un .NET intégré, vous pouvez toujours appeler P / Invoke vers CredUIParseUserName . Voici un exemple de son utilisation dans .NET.

    PS: Il ne semble pas gérer le “point”, comme dans “. \ Username”.

    Semble un problème à résoudre par des expressions régulières:

     public static class UserExtensions { public static ssortingng GetDomain(this IIdentity identity) { Regex.Match(identity.Name, ".*\\\\").ToSsortingng() } public static ssortingng GetLogin(this IIdentity identity) { return Regex.Replace(identity.Name, ".*\\\\", ""); } }