内置帮助程序将User.Identity.Name解析为Domain\Username

aba*_*hev 46 .net c# asp.net authentication active-directory

是否有任何内置的实用程序或帮助程序来解析HttpContext.Current.User.Identity.Name,例如domain\user,如果存在和用户单独获取域名?

或者还有其他课程吗?

我知道这很容易打电话String.Split("\")但很有意思

Aen*_*dhe 69

这是更好的(更容易使用,没有机会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;
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

IIdentity id = HttpContext.Current.User.Identity;
id.GetLogin();
id.GetDomain();
Run Code Online (Sandbox Code Playgroud)

这需要C#3.0编译器(或更新版本),并且在编译后不需要3.0 .Net来工作.

  • 你在`GetLogin`中的return语句可以简化为`return s.Substring(stop + 1);` (7认同)

Sta*_*Cub 13

System.Environment.UserDomainName 仅为您提供域名

同样,System.Environment.UserName仅为您提供用户名

  • > System.Environment.UserDomainName`仅为您提供域名>>类似地,`System.Environment.UserName`仅为您提供用户名这将不适用于ASP.NET (2认同)

Gru*_*nny 7

var components = User.Identity.Name.Split('\\');

var userName = components.Last() 

var domainName = components.Reverse().Skip(1).FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)


Oma*_*mar 5

你们还可以考虑解析像“user@company.com”或“user@domain”这样的字符串输入。

这就是我当前正在做的事情:
如果字符串包含“\”,则在“\”处拆分字符串并提取用户名和域,
否则如果字符串包含“@”,则在“@”处拆分字符串并提取用户名和域,
否则将字符串视为不带域名的用户名

在输入字符串不是易于预测的格式(即“domain\user@domain”)的情况下,我仍在寻找更好的解决方案。我在想正则表达式...

更新:我纠正了。我的答案有点脱离上下文,它指的是从用户输入中解析用户名和域的一般情况,例如在用户登录/登录提示中。希望它仍然对某人有帮助。