如果我有目录路径(以及相应的凭据),例如:
LDAP://directory:389/DC=domain,DC=com
我可以使用哪些类/方法通过其专有名称(DN)属性访问各种对象?我已经尝试了DirectoryEntry
类,但没有找到任何方法从“基础”对象和DN中检索DirectoryEntry
对象。
示例:拥有上面的目录网址和DN CN=User,OU=Development,DC=domain,DC=com
,如何访问DirectoryEntry
的{{1}}(或类似)对象?
我已经看到一些涉及URL的字符串操作的解决方案,但我正在寻找一种方法来使用普通的.NET对象/类来实现这一点。
答案 0 :(得分:1)
全部解释为here。
以下是一个例子:
DirectoryEntry userEntry = new DirectoryEntry("LDAP://directory:389/CN=User,OU=Development,DC=domain,DC=com",
"<adminAccountName>",
"<adminPassword");
有一个好的教程here。
答案 1 :(得分:0)
您可以使用 DirectorySearcher
从根DirectoryEntry
搜索子树吗?
在评论中注明时,这无济于事。我认为没有任何替代方法可以解析DirectoryEntry.Path,提取您需要的位数,并连接您的DN,如果需要,可以转义DN中的任何特殊字符。
您需要包括第三个斜杠在内的所有内容:
LDAP://server:port/relativePath
或使用无服务器绑定时的第二个斜杠:
LDAP://relativePath
但如果relativePath本身包含斜杠(将使用反斜杠进行转义),则可能存在歧义。所以,正如你所说,字符串操作。
答案 2 :(得分:0)
这是我目前使用的不太理想的方法:
string GetNewDN(DirectoryEntry deBase, string DN)
{
try
{ // Handle the LDAP://example.com:389/DN=string formats
return (new Uri(deBase.Path)).GetLeftPart(UriPartial.Authority) + "/" + DN.Replace("/", @"\/");
}
catch (UriFormatException)
{ // Handle the LDAP://DN=string formats
return deBase.Path.Substring(0, deBase.Path.IndexOf(":")) + "://" + DN.Replace("/", @"\/");
}
}