是否有任何内置实用程序或帮助程序可以解析HttpContext.Current.User.Identity.Name
,例如domain\user
如果存在和用户单独获取域名?
或者还有其他课程吗?
我知道调用String.Split("\")
非常容易,但只是有趣
答案 0 :(得分:68)
这样更好(更容易使用,没有NullReferenceExcpetion
的机会,并且符合MS编码指南关于同等地处理空字符串和空字符串):
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工作。
答案 1 :(得分:13)
System.Environment.UserDomainName
仅为您提供域名
同样,System.Environment.UserName
仅为您提供用户名
答案 2 :(得分:7)
var components = User.Identity.Name.Split('\\');
var userName = components.Last()
var domainName = components.Reverse().Skip(1).FirstOrDefault()
答案 3 :(得分:4)
我觉得不行,因为前几天我问自己同样的问题: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;
}
答案 4 :(得分:4)
你们也可以考虑解析像“user@company.com”或“user @ domain”这样的字符串输入。
这就是我目前正在做的事情:
如果字符串包含'\',则将字符串拆分为'\'并提取用户名和域
否则如果字符串包含'@',则将字符串拆分为'@'并提取用户名和域
否则将字符串视为没有域的用户名
在输入字符串不是容易预测的格式(即“domain \ user @ domain”)的情况下,我仍在寻求更好的解决方案。我在想RegEx ......
更新:我的立场得到了纠正。我的答案有点外向,它指的是用户输入解析用户名和域的一般情况,例如在用户登录/登录提示中。希望它仍能帮到某人。
答案 5 :(得分:1)
我不这么认为,因为System.Security.Principal.WindowsIdentity不包含这样的成员。
答案 6 :(得分:1)
虽然不是.NET内置的,但总是可以P / Invoke到CredUIParseUserName。 Here是如何在.NET中使用它的一个例子。
PS:它似乎没有处理" dot",如"。\ username"。
答案 7 :(得分:0)
似乎是一个由正则表达式解决的问题:
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, ".*\\\\", "");
}
}