使用 System.DirectoryServices.Protocols
命名空间添加/修改 Active Directory 组上的属性。代码:
public void UpdateProperties(Dictionary<string, string> Properties) {
List<DirectoryAttributeModification> directoryAttributeModifications;
// ... Code to convert Properties dictionary to directoryAttributeModifications
// There is one 'Add' modification, to set the 'description' of the group
ModifyRequest modifyRequest = new ModifyRequest(groupDistinguishedName, directoryAttributeModifications.ToArray());
modifyRequest.Controls.Add(new PermissiveModifyControl());
ModifyResponse response = connection.SendRequest(modifyRequest) as ModifyResponse;
如果描述已经存在,
PermissiveModifyControl
旨在防止代码失败。我发现的关于 PermissiveModifyControl 的唯一信息在这里:http://msdn.microsoft.com/en-us/library/bb332056.aspx
其中指出:
但是,当上面的代码到达
SendRequest()
时,它会抛出一个 DirectoryOperationException
:“属性存在或值已分配。”我试图避免的是必须查询正在传递的集合中的每个属性;如果存在,创建一个
Replace
DirectoryAttributeModification
;如果没有,请创建一个 Add
代替。据我所知,PermissiveModifyControl
应该做到这一点。谁能解释为什么
PermissiveModifyControl
仍然抛出 DirectoryOperationException
,以及如何正确使用它?提前致谢!
詹姆士
最佳答案
经过更多实验,我发现文档具有误导性……您不想添加属性,而是想替换它( DirectoryAttributeOperation.Replace
)。如果该属性存在,它当然会替换它。如果该属性不存在,它将创建它。
我的其余代码是正确的。
关于c# - PermissiveModifyControl 在 C# LDAP 中抛出 DirectoryOperationException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3450732/