在 C# 中使用 ldap 的 Active Directory

本文关键字:Active Directory ldap | 更新日期: 2023-09-27 18:33:08

我用过System.DirectoryServices.ActiveDirectory但是当我尝试使用Domain.NameDomain.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/>");
        }  
    }
}

怎么了?

在 C# 中使用 ldap 的 Active Directory

根据 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 命名空间来完成您的任务。