How to get username without domain

In an aspx page I get the Windows username with the function Request.LogonUserIdentity.Name. This function returns a string in the format “domainuser”.

Is there some function to only get the username, without resorting to the IndexOf and Substring, like this?

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

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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

Method 2

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("@"));

Method 3

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();

Method 4

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();

Method 5

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

If you include this code, you could then just do something like:

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

Obviously in a web environment, you wouldn’t write to the console – just an example…

Method 6

An alternative way of doing the same thing as the other answers:

var usernameWithoutDomain = Path.GetFileName(@"somedomainsomeusername")

It is just unsafe as not checking for the @ variant of usernames.

Method 7

I was suggesting to use regexpes but they would be overkill.
[System.String.Split](http://msdn.microsoft.com/en-us/library/b873y76a(VS.80).aspx) do the job.

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


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x