4

ありますか:

文字列名=System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName;

.net 2.0フレームワークでの同等性?System.DirectoryServices.AccountManagement(バージョン3.5)参照を使用します。そのファイルを.net2.0フレームワークで使用してみましたが、役に立ちませんでした。

基本的に、Windowsユーザーの完全なユーザー名(名と姓)を取得したい(Windowsユーザー名のみを提供するRequest.ServerVariables ["REMOTE_USER"]ではない)

4

1 に答える 1

7

S.DS.AM 名前空間は .NET 3.5 で導入されましたが、残念ながら 2.0 バージョンはありません。

WindowsIdentity.GetCurrent().Name を使用して、ASP.NET アプリで現在の Windows ユーザーを照会できます。これにより、DOMAIN\UserName が得られます。

次に、対応する DirectoryEntry を見つけるために、DirectorySearcher オブジェクトを使用して AD でそのユーザーのユーザー検索を行う必要があります。これにより、そのユーザーのすべての断片が得られます。

    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 に関係しています - それを変更することはできません :-(

マルク

于 2009-05-29T08:57:37.303 に答える