C# 如何使用C在Active Directory中查找给定的键值(web.config)#

C# 如何使用C在Active Directory中查找给定的键值(web.config)#,c#,asp.net-web-api,C#,Asp.net Web Api,我不熟悉Web API。我想用C#中的Web API连接我的PHP网站,这将有助于使用Windows身份验证登录网站。我在web.config文件中指定了key=“name”和values=“DavidR,JohnH”。只有键值中提供的名称才能登录到系统 public bool Post(string user, string pass, string domain) { DirectoryEntry objDirEntry = new DirectoryEntry("LDAP://"

我不熟悉Web API。我想用C#中的Web API连接我的PHP网站,这将有助于使用Windows身份验证登录网站。我在
web.config
文件中指定了
key=“name”
values=“DavidR,JohnH”
。只有键值中提供的名称才能登录到系统

public bool Post(string user, string pass, string domain)
{
    DirectoryEntry objDirEntry = new DirectoryEntry("LDAP://" + domain, user, pass);

    try
    {
            DirectorySearcher search = new DirectorySearcher(objDirEntry);
            SearchResult result = search.FindOne();
            string[] name = ConfigurationManager.AppSettings["name"].Split(',');

            foreach (var author in name)
            {
                if (result == null)
                {
                    return false;
                }
                else if(result == name)
                {
                    return true;
                }
            }

            return false;
    }
    catch (Exception)
    {
        return false;
    }
}

尝试以下代码:

        public bool Post(string user, string pass, string domain)
    {
        DirectoryEntry objDirEntry = new DirectoryEntry("LDAP://" + domain, user, pass);
        try
        {
            DirectorySearcher search = new DirectorySearcher(objDirEntry);
            SearchResult result = search.FindOne();
            if (result == null)
                return false;
            string[] name = ConfigurationManager.AppSettings["name"].Split(',');
            foreach (var author in name)
            {
                if(author.ToLower() == user.ToLower())
                {
                    return true;
                }
            }
            return false;
        }
        catch (Exception)
        {
            return false;
        }
    }
这段代码应该有效

您可以将短代码与
Linq
一起使用,如下所示:

        public bool Post(string user, string pass, string domain)
    {
        DirectoryEntry objDirEntry = new DirectoryEntry("LDAP://" + domain, user, pass);
        try
        {
            DirectorySearcher search = new DirectorySearcher(objDirEntry);
            SearchResult result = search.FindOne();
            if (result == null)
                return false;
            string[] name = ConfigurationManager.AppSettings["name"].Split(',');

            if (name.Any(x => x.ToLower() == user.ToLower()))
                return true;
            return false;
        }
        catch (Exception)
        {
            return false;
        }
    }
请尝试以下代码:

        public bool Post(string user, string pass, string domain)
    {
        DirectoryEntry objDirEntry = new DirectoryEntry("LDAP://" + domain, user, pass);
        try
        {
            DirectorySearcher search = new DirectorySearcher(objDirEntry);
            SearchResult result = search.FindOne();
            if (result == null)
                return false;
            string[] name = ConfigurationManager.AppSettings["name"].Split(',');
            foreach (var author in name)
            {
                if(author.ToLower() == user.ToLower())
                {
                    return true;
                }
            }
            return false;
        }
        catch (Exception)
        {
            return false;
        }
    }
这段代码应该有效

您可以将短代码与
Linq
一起使用,如下所示:

        public bool Post(string user, string pass, string domain)
    {
        DirectoryEntry objDirEntry = new DirectoryEntry("LDAP://" + domain, user, pass);
        try
        {
            DirectorySearcher search = new DirectorySearcher(objDirEntry);
            SearchResult result = search.FindOne();
            if (result == null)
                return false;
            string[] name = ConfigurationManager.AppSettings["name"].Split(',');

            if (name.Any(x => x.ToLower() == user.ToLower()))
                return true;
            return false;
        }
        catch (Exception)
        {
            return false;
        }
    }

你的问题是什么?代码在没有密钥的情况下运行良好。问题是我只想访问我在密钥中定义的那些名称。在我的else if条件中,我得到一个错误运算符“==”不能应用于“SearchResult”和“string[]”类型的操作数!我发布了一个与此帖子相关的问题。你能看一下吗?非常感谢。你的问题是什么?代码在没有密钥的情况下运行良好。问题是我只想访问我在密钥中定义的那些名称。在我的else if条件中,我得到一个错误运算符“==”不能应用于“SearchResult”和“string[]”类型的操作数!我发布了一个与此帖子相关的问题。你能看一下吗?非常感谢。