如何获取没有域名的用户名

在一个aspx页面中,我得到了具有函数Request.LogonUserIdentity.Name的Windows用户名。 该函数返回格式为“domain \ user”的string。

有没有一些函数只获取用户名,而不诉诸IndexOfSubstring ,像这样?

 public static string StripDomain(string username) { int pos = username.IndexOf('\\'); return pos != -1 ? username.Substring(pos + 1) : username; } 

我不这么认为。 我已经得到了使用这些方法的用户名前 –

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

要么

 Request.LogonUserIdentity.Name.Substring(Request.LogonUserIdentity.Name.LastIndexOf(@"\") + 1); 

如果您正在使用Windows身份validation。 这可以简单地通过调用System.Environment.UserName来实现,它只会给你用户名。 如果你只想要域名你可以使用System.Environment.UserDomainName

获取零件[1]不是一个安全的方法。 我宁愿使用LINQ .Last():

 WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent(); if (windowsIdentity == null) throw new InvalidOperationException("WindowsIdentity is null"); string nameWithoutDomain = windowsIdentity.Name.Split('\\').Last(); 

如果你正在使用.NET 3.5,你总是可以为WindowsIdentity类创build一个扩展方法来为你工作。

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

这样你的代码中的任何地方你都必须做的是参考:

Request.LogonUserIdentity.NameWithoutDomain();

 static class IdentityHelpers { public static string ShortName(this WindowsIdentity Identity) { if (null != Identity) { return Identity.Name.Split(new char[] {'\\'})[1]; } return string.Empty; } } 

如果你包含这个代码,那么你可以做一些事情:

 WindowsIdentity a = WindowsIdentity.GetCurrent(); Console.WriteLine(a.ShortName); 

很明显,在networking环境中,你不会写信给控制台 – 只是一个例子…

我build议使用正则expression式,但它们会过度杀伤。 [System.String.Split]( http://msdn.microsoft.com/en-us/library/b873y76a ( VS.80).aspx)做这项工作。

 string[] parts= username.Split( new char[] {'\\'} ); return parts[1];