Question

J'ai une application ASP.NET qui fonctionne sur notre intranet. Dans la production, je peux obtenir l'utilisateur du contexte de domaine et avoir accès à beaucoup d'information, y compris leur nom et prénom (UserPrincipal.GivenName et UserPrincipal.Surname).

Notre environnement de test ne fait pas partie du domaine de la production et les utilisateurs de test ne disposent pas de comptes de domaine dans l'environnement de test. Donc, nous les ajoutons que les utilisateurs de la machine locale. Ils sont invités à entrer des informations d'identification lorsqu'ils naviguent sur la page de démarrage. J'utilise la méthode suivante pour obtenir le UserPrincipal

public static UserPrincipal GetCurrentUser()
        {
            UserPrincipal up = null;

            using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
            {
                up = UserPrincipal.FindByIdentity(context, User.Identity.Name);
            }

            if (up == null)
            {
                using (PrincipalContext context = new PrincipalContext(ContextType.Machine))
                {
                    up = UserPrincipal.FindByIdentity(context, User.Identity.Name);
                }
            }

            return up;
        }

Le problème que j'ai ici est que lorsque le UserPrinicipal est quand ContextType == ren- voyées machine Je ne reçois pas de propriétés comme GivenName ou nom de famille. Est-il possible de définir ces valeurs lors de la création de l'utilisateur (Windows Server 2008) ou dois-je aller à ce sujet d'une manière différente?

Était-ce utile?

La solution

La fonction en doit être modifié question initiale. Si vous essayez d'accéder à l'objet UserPrincipal qui est retourné, vous obtiendrez un ObjectDisposedException

En outre, le User.Identity.Name n'est pas disponible et doit être transmis.

Je l'ai apporté les modifications suivantes à la fonction ci-dessus.

public static UserPrincipal GetUserPrincipal(String userName)
        {
            UserPrincipal up = null;

            PrincipalContext context = new PrincipalContext(ContextType.Domain);
            up = UserPrincipal.FindByIdentity(context, userName);

            if (up == null)
            {
                context = new PrincipalContext(ContextType.Machine);
                up = UserPrincipal.FindByIdentity(context, userName);
            }

            if(up == null)
                throw new Exception("Unable to get user from Domain or Machine context.");

            return up;
        }

En outre, la propriété de UserPrincipal je dois utiliser est DisplayName (au lieu de GivenName et nom);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top