我尝试使用下面的代码为organizationalUnit创建主体扩展
[DirectoryRdnPrefix("OU")]
[DirectoryObjectClass("organizationalUnit")]
public class OrganizationalUnitPrincipal : Principal
{
public OrganizationalUnitPrincipal(PrincipalContext Context_p)
{
PropertyInfo contextRaw = this.GetType().BaseType.GetProperty("ContextRaw",
BindingFlags.Instance | BindingFlags.NonPublic);
contextRaw.SetValue(this, Context_p, null);
}
}
但它会引发以下错误:
System.ArgumentException: Persisted Principal objects cannot be used as query filters.
当我尝试检索organizationalUnit属性和属性时,会发生此错误。
这可以吗?
上的展示相同答案 0 :(得分:0)
从理论的角度来看,我认为你想做的事没有意义。在你指出的文章中对此进行了解释,但并不是那么清楚。 Principal
的概念基于Directory Schema
描述您可以添加到ActiveDirectory的对象。
可以扩展Principal,AuthenticablePrincipal,UserPrincipal,ComputerPrincipal和GroupPrincipal类,以创建扩展对象模型的自定义对象。
但是在LDAP中,在Active-Directory中就是这种情况,类organizationalUnit
不是user
类的子类,而只是top
类的子类。
换句话说:从概念的角度来看,你可以注意到Principal
是一种用户(在Microsoft的观点中,是的计算机是用户,他们像用户一样在域上打开会话)和{ {1}}是一种组织框(如文件系统中的目录),因此第二个框不会扩展第一个框。
被修改
这是DirectoryEntry的子类,可以执行您想要的操作:
organizationalUnit