繁体   English   中英

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

[英]Built-in helper to parse User.Identity.Name into Domain\Username

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

或者还有其他课程吗?

我知道调用String.Split("\\")非常容易,但很有趣

这样更好( 更容易使用,没有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来工作。

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

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

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

var userName = components.Last() 

var domainName = components.Reverse().Skip(1).FirstOrDefault()

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

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

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

更新:我的立场得到纠正。 我的答案有点外向,它指的是用户输入解析用户名和域的一般情况,例如在用户登录/登录提示中。 希望它仍然可以帮助某人。

我想也没有,因为我前几天问自己同样的问题: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;
}

虽然不是.NET内置的,但总是可以P / Invoke到CredUIParseUserName 是一个如何在.NET中使用它的示例。

PS:它似乎没有处理“点”,如“。\\ username”。

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

似乎是一个由正则表达式解决的问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM