useridentity name empty current c# asp.net .net authentication active-directory

c# - empty - this user identity name



Ayudante incorporado para analizar User.Identity.Name en Domain / Username (8)

¿Hay alguna utilidad incorporada o ayudante para analizar HttpContext.Current.User.Identity.Name , por ejemplo, domain/user para obtener el nombre de dominio por separado si existe y el usuario?

¿O hay alguna otra clase para hacerlo?

Entiendo que es muy fácil llamar a String.Split("/") pero solo es interesante



Creo que tampoco, porque el otro día me hice la misma pregunta: D

Puedes probar:

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; }


Esto es mejor ( más fácil de usar, no hay oportunidad de NullReferenceExcpetion y cumple con las pautas de codificación de MS sobre tratar cadenas vacías y nulas por igual ):

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; } }

Uso:

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

Esto requiere el compilador C # 3.0 (o posterior) y no requiere 3.0 .Net para trabajar después de la compilación.


No lo creo, porque System.Security.Principal.WindowsIdentity no contiene dichos miembros.


Parece un problema hecho para ser resuelto por expresiones regulares:

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, ".*////", ""); } }


Ustedes también pueden considerar analizar una entrada de cadena como "[email protected]" o "usuario @ dominio".

Esto es lo que estoy haciendo actualmente:
Si la cadena contiene ''/', divide la cadena en ''/' y extrae el nombre de usuario y el dominio
Si la cadena contiene ''@'', entonces divida una cadena en ''@'' y extraiga el nombre de usuario y el dominio
Cadena de tratamiento adicional como nombre de usuario sin dominio

Todavía estoy buscando una mejor solución en el caso de que la cadena de entrada no esté en un formato fácilmente pronosticado, es decir, "dominio / usuario @ dominio". Estoy pensando en RegEx ...

Actualización: estoy corregido. Mi respuesta es un poco fuera de contexto, se refiere al caso general de análisis de nombre de usuario y dominios fuera de la entrada del usuario, como en el inicio de sesión de usuario / inicio de sesión. Espero que todavía ayude a alguien.


System.Environment.UserDomainName le proporciona el nombre de dominio solamente

Del mismo modo, System.Environment.UserName le da solo el nombre de usuario


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