在 C# 中使用 ldap 的 Active Directory
本文关键字:Active Directory ldap | 更新日期: 2023-09-27 18:33:08
我用过System.DirectoryServices.ActiveDirectory
但是当我尝试使用Domain.Name
或Domain.GetDomain
方法时,出现错误
"域"不包含"GetDomain"的定义。
这是我的代码:
using System;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.Specialized;
using System.DirectoryServices.ActiveDirectory;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DirectoryContext s = new DirectoryContext(DirectoryContextType.Domain, "my domain", "myuser", "mypass");
Domain domain = Domain.GetDomain(s);
Forest forest = domain.Forest;
DomainCollection domains = forest.Domains;
foreach (Domain objDomain in domains)
{
Response.Write(objDomain.Name.ToString());
Response.Write("<br/>");
}
}
}
怎么了?
根据 MSDN,GetDomain()
是一种静态方法,这意味着它无法在静态上下文之外访问 - 这就是您收到该特定错误的原因。为了证明这一点,我只是将您的代码复制并粘贴到控制台应用程序中,默认情况下,该应用程序将从名为 Main()
的静态 void 方法运行:
using System;
using System.DirectoryServices.ActiveDirectory;
namespace LDAPTEST
{
public class Program
{
static void Main(string[] args)
{
DirectoryContext s = new DirectoryContext(DirectoryContextType.Domain, "DC=hq,DC=xxxxxxxxx,DC=com", "TestUsername", "TestPassword");
Domain domain = Domain.GetDomain(s);
Forest forest = domain.Forest;
DomainCollection domains = forest.Domains;
foreach (Domain objDomain in domains)
{
Console.Write("");
}
}
}
}
这将编译并运行。但是,由于您正在开发 Asp.Net Web 应用程序,因此我建议使用较低级别的 System.DirectoryServices.Protocols
甚至 System.DirectoryServices.AccountManagement
命名空间来完成您的任务。