System.DirectoryServices.AccountManagement в .net 2.0 - PullRequest
4 голосов
/ 29 мая 2009

Есть ли:

имя строки = System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName;

эквивалентность в .net 2.0 framework? Он использует ссылку System.DirectoryServices.AccountManagement (версия 3.5). Я пытался использовать этот файл на платформе .net 2.0, но безрезультатно.

Как правило, я хочу получить полное имя пользователя (имя и фамилию) пользователя Windows (не Request.ServerVariables ["REMOTE_USER"], которое дает только имя пользователя Windows)

1 Ответ

7 голосов
/ 29 мая 2009

Пространство имен S.DS.AM появилось в .NET 3.5, и, к сожалению, его версии 2.0 нет.

Вы можете запросить текущего пользователя Windows в приложении ASP.NET, используя WindowsIdentity.GetCurrent (). Name - это дает вам DOMAIN \ UserName.

Тогда вам нужно будет выполнить поиск пользователя в AD для этого пользователя с объектом DirectorySearcher, чтобы найти соответствующий DirectoryEntry. Это даст вам все кусочки этого пользователя.

    string currentUser = WindowsIdentity.GetCurrent().Name;

    string[] domainUserName = currentUser.Split('\\');
    string justUserName = domainUserName[1];

    DirectoryEntry searchRoot = new DirectoryEntry("LDAP://dc=(yourcompany),dc=com");

    DirectorySearcher ds = new DirectorySearcher(searchRoot);

    ds.SearchScope = SearchScope.Subtree;

    ds.PropertiesToLoad.Add("sn");
    ds.PropertiesToLoad.Add("givenName");

    ds.Filter = string.Format("(&(objectCategory=person)(samAccountName={0}))", justUserName);

    SearchResult sr = ds.FindOne();

    if (sr != null)
    {
        string firstName = sr.Properties["givenName"][0].ToString();
        string lastName = sr.Properties["sn"][0].ToString();
    }

Это немного сложно и связано с .NET 2.0 - не могу изменить это: - (

Марк

...