How to get username without domain

If you are using Windows Authentication. This can simply be achieved by calling System.Environment.UserName which will give you the user name only. If you want only the Domain name you can use System.Environment.UserDomainName


I don't believe so. I have got the username using these methods before-

var user = System.Web.HttpContext.Current.User;   
var name = user.Identity.Name;

var slashIndex = name.IndexOf("\\");
return slashIndex > -1 
    ? name.Substring(slashIndex  + 1)
    : name.Substring(0, name.IndexOf("@"));

or

var name = Request.LogonUserIdentity.Name;

var slashIndex = name.IndexOf("\\");
return slashIndex > -1 
    ? name.Substring(slashIndex  + 1)
    : name.Substring(0, name.IndexOf("@"));

If you are using .NET 3.5 you could always create an extension method to the WindowsIdentity class that does this work for you.

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];
}

that way all you have to do anywhere in your code is reference:

Request.LogonUserIdentity.NameWithoutDomain();


Getting parts[1] is not a safe approach. I would prefer use LINQ .Last():

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

Tags:

Asp.Net