簡體   English   中英

如何在沒有域的情況下獲取用戶名

[英]How to get username without domain

在 aspx 頁面中,我使用Request.LogonUserIdentity.Name函數獲取 Windows 用戶名。 此函數返回格式為“域\\用戶”的字符串。

是否有一些函數只獲取用戶名,而不使用IndexOfSubstring ,像這樣?

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

如果您使用的是 Windows 身份驗證。 這可以簡單地通過調用System.Environment.UserName來實現,它只會為您提供用戶名。 如果你只想要域名,你可以使用System.Environment.UserDomainName

我不相信。 我之前使用這些方法獲得了用戶名-

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

或者

var name = Request.LogonUserIdentity.Name;

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

獲取部件 [1] 不是一種安全的方法。 我更喜歡使用 LINQ .Last():

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

如果您使用的是 .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();

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

顯然,在網絡環境中,您不會寫入控制台 - 只是一個例子......

做與其他答案相同的事情的另一種方法:

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

不檢查用戶名的@ 變體是不安全的。

我建議使用正則表達式,但它們會矯枉過正。 [System.String.Split]( http://msdn.microsoft.com/en-us/library/b873y76a(VS.80).aspx)完成這項工作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM