asp.net - sesion - share console
Cómo obtener un nombre de usuario sin dominio (6)
Si está usando .NET 3.5, siempre puede crear un método de extensión para la clase WindowsIdentity que hace esto por usted.
public static string NameWithoutDomain( this WindowsIdentity identity )
{
string[] parts = identity.Name.Split(new char[] { ''//' });
//highly recommend checking parts array for validity here
//prior to dereferencing
return parts[1];
}
De esa forma, todo lo que tienes que hacer en cualquier parte de tu código es referencia:
Request.LogonUserIdentity.NameWithoutDomain ();
En una página aspx, obtengo el nombre de usuario de Windows con la función Request.LogonUserIdentity.Name
. Esta función devuelve una cadena en el formato "dominio / usuario".
¿Hay alguna función para obtener solo el nombre de usuario, sin recurrir a IndexOf
y Substring
, así?
public static string StripDomain(string username)
{
int pos = username.IndexOf(''//');
return pos != -1 ? username.Substring(pos + 1) : username;
}
Yo sugería usar expresiones regulares, pero serían excesivas. [System.String.Split] ( http://msdn.microsoft.com/en-us/library/b873y76a(VS.80).aspx) hacer el trabajo.
string[] parts= username.Split( new char[] {''//'} );
return parts[1];
static class IdentityHelpers
{
public static string ShortName(this WindowsIdentity Identity)
{
if (null != Identity)
{
return Identity.Name.Split(new char[] {''//'})[1];
}
return string.Empty;
}
}
Si incluye este código, podría hacer algo como:
WindowsIdentity a = WindowsIdentity.GetCurrent();
Console.WriteLine(a.ShortName);
Obviamente, en un entorno web, no escribirías en la consola, solo un ejemplo ...
Si usa la Autenticación de Windows. Esto se puede lograr simplemente llamando a System.Environment.UserName
que le dará solo el nombre de usuario. Si solo desea el nombre de dominio, puede usar System.Environment.UserDomainName
Yo no lo creo. Tengo el nombre de usuario usando estos métodos antes-
System.Security.Principal.IPrincipal user = System.Web.HttpContext.Current.User;
System.Security.Principal.IIdentity identity = user.Identity;
return identity.Name.Substring(identity.Name.IndexOf(@"/") + 1);
o
Request.LogonUserIdentity.Name.Substring(Request.LogonUserIdentity.Name.LastIndexOf(@"/") + 1);
Obtener piezas [1] no es un enfoque seguro. Yo preferiría usar LINQ .Last ():
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
if (windowsIdentity == null)
throw new InvalidOperationException("WindowsIdentity is null");
string nameWithoutDomain = windowsIdentity.Name.Split(''//').Last();