Подтвердить что ты не робот

Как получить имя пользователя без домена

На странице aspx я получаю имя пользователя Windows с помощью функции Request.LogonUserIdentity.Name. Эта функция возвращает строку в формате "domain\user".

Есть ли какая-то функция только для получения имени пользователя, не прибегая к IndexOf и Substring, как это?

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

Ответ 1

Я так не верю. У меня есть имя пользователя, использующее эти методы раньше -

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

Если вы используете проверку подлинности Windows. Этого просто можно достичь, вызвав System.Environment.UserName, который даст вам только имя пользователя. Если вы хотите использовать только имя домена, вы можете использовать System.Environment.UserDomainName

Ответ 3

Получение деталей [1] не является безопасным подходом. Я бы предпочел использовать LINQ.Last():

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

Ответ 4

Если вы используете .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();

Ответ 5

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

Очевидно, что в веб-среде вы не будете писать на консоль - просто пример...

Ответ 6

Я предлагал использовать regexpes, но они были бы излишними. [System.String.Split] (http://msdn.microsoft.com/en-us/library/b873y76a(VS.80).aspx) выполнить задание.

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

Ответ 7

Просто случайный способ сделать то же самое:

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

Это просто безопасно, так как не проверяется @вариант имени пользователя.