如何获取没有域名的用户名

时间:2008-12-01 09:06:26

标签: asp.net

在aspx页面中,我获得了具有函数Request.LogonUserIdentity.Name的Windows用户名。此函数返回“domain \ user”格式的字符串。

是否有一些功能只能获取用户名,而不是诉诸IndexOfSubstring,就像这样?

public static string StripDomain(string username)
{
    int pos = username.IndexOf('\\');
    return pos != -1 ? username.Substring(pos + 1) : username;
}

7 个答案:

答案 0 :(得分:54)

如果您使用的是Windows身份验证。 这可以通过调用System.Environment.UserName来实现,它只会为您提供用户名。 如果您只想要域名,可以使用System.Environment.UserDomainName

答案 1 :(得分:35)

我不相信。我之前使用这些方法获得了用户名 -

System.Security.Principal.IPrincipal user = System.Web.HttpContext.Current.User;   
System.Security.Principal.IIdentity identity = user.Identity;  
return identity.Name.Substring(identity.Name.IndexOf(@"\") + 1);

Request.LogonUserIdentity.Name.Substring(Request.LogonUserIdentity.Name.LastIndexOf(@"\") + 1);

答案 2 :(得分:18)

获取零件[1]并不是一种安全的方法。我更喜欢使用LINQ .Last():

WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
if (windowsIdentity == null)
    throw new InvalidOperationException("WindowsIdentity is null");
string nameWithoutDomain = windowsIdentity.Name.Split('\\').Last();

答案 3 :(得分:5)

如果您使用的是.NET 3.5,则可以随时为WindowsIdentity类创建一个扩展方法,以便为您完成此任务。

public static string NameWithoutDomain( this WindowsIdentity identity )
{
    string[] parts = identity.Name.Split(new char[] { '\\' });

    //highly recommend checking parts array for validity here 
    //prior to dereferencing

    return parts[1];
}

这样你在代码中的任何地方都要做的就是参考:

  

Request.LogonUserIdentity.NameWithoutDomain();

答案 4 :(得分:1)

static class IdentityHelpers
{
    public static string ShortName(this WindowsIdentity Identity)
    {
        if (null != Identity)
        {
            return Identity.Name.Split(new char[] {'\\'})[1];
        }
        return string.Empty;
    }
}

如果您包含此代码,则可以执行以下操作:

WindowsIdentity a = WindowsIdentity.GetCurrent();
Console.WriteLine(a.ShortName);

显然,在网络环境中,你不会写入控制台 - 只是一个例子......

答案 5 :(得分:0)

我建议使用正则表达但是它们会有点矫枉过正。 [System.String.Split](http://msdn.microsoft.com/en-us/library/b873y76a(VS.80).aspx)完成工作。

string[] parts= username.Split( new char[] {'\\'} );
return parts[1];

答案 6 :(得分:0)

只是做同一件事的一种随机方式:

var usernameWithoutDomain = Path.GetFileName(@"somedomain\someusername")

不检查用户名的@变体就很安全。