【问题标题】:Get value of custom attribute for user in Active Directory获取 Active Directory 中用户的自定义属性值
【发布时间】:2016-02-17 22:26:07
【问题描述】:

我正在尝试读取一些已添加到 Active Directory 中的自定义属性的值,但我找不到任何解释如何执行此操作的内容。我找到了一个帮助我建立连接并找到用户的页面,这使我可以读取一些预制属性,但它没有涵盖如何读取自定义属性。在 Google/SO 上搜索时,我发现所有使用 DirectoryEntry 的过时说明似乎已在后来发布的 .Net 中被删除。我这样说是因为 Visual Studio 不知道该对象是什么或它属于什么命名空间。

谁能告诉我应该如何读取自定义属性?

using System.DirectoryServices.AccountManagement;
using System.Web.Mvc;

namespace JobSight.WebUI.Controllers
{
    public class BaseController : Controller
    {
        protected override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            UpdateUserFromAD();
        }

        private void UpdateUserFromAD()
        {
                var Context = new PrincipalContext(ContextType.Domain, "DomainController");
                var UserData = UserPrincipal.FindByIdentity(Context, User.Identity.Name);
        }
    }
}

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-5 active-directory .net-4.6


    【解决方案1】:

    我找不到任何证据表明正在放弃对 DirectoryEntry 的支持。

    UserPrincipal 实际上只是 DirectoryEntry 的一个包装器,正如 GetUnderlyingObject 方法的文档中所暗示的那样。

    您将能够使用 DirectoryEntry 中的属性来获取 AD 中的任何属性。

    【讨论】:

    • 当我做一个简单的var test = new DirectoryEntry() Visual Studio 确实给了我错误“命名空间'DirectoryEntry'的类型不存在,你是否缺少参考”但是当我要求它使用它没有。如果我像所有旧的/过时的示例一样添加using System.DirectoryServices,那么在尝试调用“DirectoryEntry”时会遇到相同的错误。如果它没有被删除,那么它存在于哪个命名空间中?如果UserPrincipal 只是一个说唱歌手,它不应该公开Properties 方法以便我可以搜索我的自定义属性吗?
    • 添加“使用”语句是不够的。您还必须在项目中添加引用。在解决方案资源管理器中,在您的项目下,右键单击“参考”,然后单击“添加”。在出现的窗口中找到“System.DirectoryServices”并添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多