[英]PermissiveModifyControl throws DirectoryOperationException in C# 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;
PermissiveModifyControl
旨在防止代码在描述已存在时失败。 我发现PermissiveModifyControl的唯一信息是: http : //msdn.microsoft.com/en-us/library/bb332056.aspx
其中说明:
如果LDAP修改请求尝试添加已存在的属性或者尝试删除不存在的属性,则它通常会失败。 使用
PermissiveModifyControl
,修改操作成功,而不会抛出DirectoryOperationException
错误。
但是,当上面的代码到达SendRequest()
,它会抛出DirectoryOperationException
:“属性存在或值已分配”。
我试图避免的是必须查询正在传递的集合中的每个属性; 如果存在,则创建Replace
DirectoryAttributeModification
; 如果没有,请创建一个Add
。 从我可以收集的内容来看, PermissiveModifyControl
应该就是这样做的。
任何人都可以解释为什么PermissiveModifyControl
仍然会抛出DirectoryOperationException
,以及如何正确使用它?
提前致谢! 詹姆士
经过一些实验,我发现文档有误导性...你不想添加属性,你想要替换它( DirectoryAttributeOperation.Replace
)。 如果该属性存在,它当然会替换它。 如果该属性不存在,则会创建该属性。
我的其余代码是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.