PermissiveModifyControl

PermissiveModifyControl

使用 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/

10-09 18:26