احصل على المستخدمين الاسم الكامل من سياق الجهاز

StackOverflow https://stackoverflow.com/questions/1510585

سؤال

لدي تطبيق ASP.NET يعمل على إنترانتنا. في الإنتاج، يمكنني الحصول على المستخدم من سياق المجال والوصول إلى الكثير من المعلومات بما في ذلك اسمها الأول والأخير (UserPrincipal.givenname و UserPrincipal.Surname).

بيئة الاختبار الخاصة بنا ليست جزءا من مجال الإنتاج، وليس لدى مستخدمي الاختبار حسابات مجال في بيئة الاختبار. لذلك، نضيفهم كمستخدمين آلات محلية. تتم مطالبتهم ببيانات الاعتماد عند استعراض الصفحة البداية. يمكنني استخدام الطريقة التالية للحصول على 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;
        }

المشكلة التي لدي هنا هي أنه عند إعادة اختراق UserPrinPrime عندما ContextType == Machine لا أحصل على خصائص مثل الاسم الداخلي أو اللقب. هل هناك طريقة لتعيين هذه القيم عند إنشاء المستخدم (Windows Server 2008) أو هل أحتاج إلى الذهاب حول هذا بطريقة مختلفة؟

هل كانت مفيدة؟

المحلول

يجب تعديل الوظيفة في السؤال الأصلي. إذا حاولت الوصول إلى كائن UserPrincipal الذي يتم إرجاعه، فستحصل على ObjectDisPusedException

أيضا، User.Identity.Name غير متوفر ويحتاج إلى تمريره.

لقد اتخذت التغييرات التالية في الوظيفة أعلاه.

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

علاوة على ذلك، فإن خاصية UserPrincipal أحتاج إلى استخدامها هي اسم العرض (بدلا من الاسم المحدد واللقب)؛

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top