如何获取没有域名的用户名
在一个aspx页面中,我得到了具有函数Request.LogonUserIdentity.Name
的Windows用户名。 该函数返回格式为“domain \ user”的string。
有没有一些函数只获取用户名,而不诉诸IndexOf
和Substring
,像这样?
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];