Jam*_*ing 5 c# directoryservices ldap
使用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;
Run Code Online (Sandbox Code Playgroud)
目的PermissiveModifyControl是在描述已存在时防止代码失败。我找到的有关 PermissiveModifyControl 的唯一信息在这里:
http: //msdn.microsoft.com/en-us/library/bb332056.aspx
其中指出:
如果 LDAP 修改请求尝试添加已存在的属性或尝试删除不存在的属性,则通常会失败。
PermissiveModifyControl修改操作成功,不会引发错误DirectoryOperationException。
然而,当上面的代码到达 时SendRequest(),它会抛出一个DirectoryOperationException:“该属性存在或该值已被分配。”
我试图避免的是必须查询正在传递的集合中的每个属性;如果存在,则创建一个Replace DirectoryAttributeModification; 如果没有,请创建一个Add。据我所知,PermissiveModifyControl应该就是这样做的。
任何人都可以阐明为什么PermissiveModifyControl仍然抛出 a DirectoryOperationException,以及如何正确使用它?
提前致谢!詹姆士
经过更多实验后,我发现文档具有误导性......您不想添加属性,而是想要替换它(DirectoryAttributeOperation.Replace)。如果该属性存在,它当然会替换它。如果该属性不存在,它将创建它。
我的其余代码是正确的。