c#-内置的帮助程序,将User.Identity.Name解析为Domain \ Username

是否有任何内置的实用程序或助手来解析String.Split("\"),例如 domain\user分别获取域名(如果存在)和用户?

还是有其他班级这样做?

我了解致电String.Split("\")非常容易,但很有趣

8个解决方案
69 votes

这样更好(更易于使用,没有机会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即可工作。

Aen Sidhe answered 2020-06-30T00:17:40Z
13 votes

System.Environment.UserDomainName仅给您域名

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

StarCub answered 2020-06-30T00:18:04Z
7 votes
var components = User.Identity.Name.Split('\\');

var userName = components.Last() 

var domainName = components.Reverse().Skip(1).FirstOrDefault()
Gruff Bunny answered 2020-06-30T00:18:19Z
4 votes

你们可能还考虑解析字符串输入,例如“ user@company.com”或“ user @ domain”。

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

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

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

Omar answered 2020-06-30T00:19:06Z
4 votes

我想也不是,因为前几天我问自己同样的问题: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;
}
inspite answered 2020-06-30T00:19:30Z
1 votes

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

Aen Sidhe answered 2020-06-30T00:19:50Z
1 votes

尽管不是内置的.NET,但始终可以P /调用CredUIParseUserName。 这是一个如何在.NET中使用它的示例。

PS:似乎没有处理“。\ username”中的“点”。

Mihai answered 2020-06-30T00:20:15Z
0 votes

似乎是要通过正则表达式解决的问题:

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, ".*\\\\", "");
    }
}
Adam Cooper answered 2020-06-30T00:20:35Z
translate from https://stackoverflow.com:/questions/349520/built-in-helper-to-parse-user-identity-name-into-domain-username