Frage

Ich habe eine ASP.NET-Anwendung, die in unserem Intranet läuft. In der Produktion kann ich den Benutzer aus der Domäne Kontext erhalten und haben Zugriff auf viele Informationen einschließlich ihrer Vor- und Nachnamen (UserPrincipal.GivenName und UserPrincipal.Surname).

Unsere Testumgebung ist nicht Teil der Produktionsdomäne und Testnutzer keine Domänenkonten in der Testumgebung haben. Also, wir fügen Sie sie als lokale Maschinenanwender. Sie sind für die Anmeldeinformationen aufgefordert, wenn sie auf die Startseite zu sehen. Ich verwende die folgende Methode, um die Userprincipal erhalten

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

Das Problem, das ich hier habe, ist, dass, wenn die UserPrinicipal ist retrived wenn Context == Maschine ich nicht bekommen Eigenschaften wie Given oder Nachname. Gibt es eine Möglichkeit, diese Werte zu setzen, wenn der Benutzer (Windows Server 2008) zu schaffen oder muss ich über diese in einem anderen Weg zu gehen brauchen?

War es hilfreich?

Lösung

Die Funktion in der ursprünglichen Frage muss geändert werden. Wenn Sie versuchen, das Userprincipal Objekt zuzugreifen, die zurückgegeben wird, erhalten Sie eine ObjectDisposedException bekommen

Auch die User.Identity.Name nicht verfügbar ist und weitergegeben werden muss in.

Ich habe die folgenden Änderungen an der Funktion oben gemacht.

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

Darüber hinaus ist die Eigenschaft von Userprincipal ich verwenden müssen, ist Display (statt Given und Nachname);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top