PermissiveModifyControl 在 C# LDAP 中抛出 DirectoryOperationException

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,以及如何正确使用它?

提前致谢!詹姆士

Jam*_*ing 3

经过更多实验后,我发现文档具有误导性......您不想添加属性,而是想要替换它(DirectoryAttributeOperation.Replace)。如果该属性存在,它当然会替换它。如果该属性不存在,它将创建它。

我的其余代码是正确的。