内置的帮助器将User.Identity.Nameparsing为Domain \ Username

有没有内置的实用工具或帮手parsingHttpContext.Current.User.Identity.Name ,例如domain\user获得单独的域名,如果存在和用户?

或者还有其他的课程吗?

我明白这很容易调用String.Split("\")但只是有趣的

这是更好的( 更容易使用,没有NullReferenceExcpetion机会,并符合MS编码指南有关处理空和空string均等 ):

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

用法:

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

这需要C#3.0编译器(或更新),编译后不需要3.0 .Net。

System.Environment.UserDomainName为您提供域名

同样, System.Environment.UserName给你用户名

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

我想也没有,因为前几天我问自己同样的问题:D

你可以试试:

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

你们也可以考虑parsing一个stringinput,比如“user@company.com”,或者“user @ domain”。

这是我目前正在做的事情:
如果string包含'\',则将string拆分为'\'并提取用户名和域
否则,如果string包含“@”,则将string拆分为“@”并提取用户名和域
否则将string视为没有域名的用户名

在inputstring不是容易预测的格式,即“域\用户@域”的情况下,我还在寻找更好的解决scheme。 我在想RegEx …

更新:我站好了。 我的答案是有点out的上下文,它指的是parsing用户input的用户名和域的一般情况,就像在用户login/login提示符。 希望它仍然有助于某人。

我不这么认为,因为System.Security.Principal.WindowsIdentity不包含这样的成员。

虽然不是内置的.NET,但可以始终将P / Invoke设置为CredUIParseUserName 。 这里有一个如何在.NET中使用它的例子。

PS:它似乎不处理“点”,如“\ \用户名”。

看起来像是一个正则expression式要解决的问题:

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