c# LDAP 使用 LDAP 查询的详细信息填充列表

c# LDAP Populating a list with details from an LDAP query

我正在构建一个应用程序,我需要为 LDAP 查询中的每个匹配实例创建一个列表。

它应该像这样工作...如果用户在 'Smith' 中搜索 sn(姓氏),那么所有姓 'Smith' 的人都将在列表中填充他们的详细信息。

然后我可以使用此列表生成用户可以从中选择的选择框的详细信息,随后这将保存在他们使用的任何表单中。

我正在努力使它可在我的解决方案中的许多应用程序中重复使用,以便将搜索字段和要搜索的值传递给此操作(很可能会以通配符作为后缀),然后填充列表。调用此操作的页面可以保存他们从 LDAP 搜索中需要的任何详细信息,无论是名字还是 cn,无论需要什么。

我似乎无法让我的代码看起来正确,我的假设是它类似于 JS 中的函数,但 Visual studio 突出显示我的部分代码不正确。

这是我的代码(我在 visual studio 突出显示为不正确的部分旁边添加了注释)

using System.Collections.Generic;
using System.DirectoryServices;

namespace solutionName.Apps.Models
{
    public class LDAP
    {
        protected void LDAP_Search(string LDAP_Field, string LDAP_Value)
        {
            string _ldapserver = "myLDAPServer";
            string _port = "123";
            string _username = "myUserName";
            string _password = "myPassword";
            _ldapserver = "LDAP://" + _ldapserver + ":" + _port;
            DirectoryEntry entry = new DirectoryEntry(_ldapserver, _username, _password);
            entry.AuthenticationType = AuthenticationTypes.None;
            DirectorySearcher deSearch = new DirectorySearcher(entry);
            deSearch.PropertiesToLoad.Add("fullname");
            deSearch.PropertiesToLoad.Add("givenName");
            deSearch.PropertiesToLoad.Add("sn");
            deSearch.PropertiesToLoad.Add("PersonOUC");
            deSearch.PropertiesToLoad.Add("mail");
            deSearch.PropertiesToLoad.Add("cn");
            deSearch.Filter = "(&(" + LDAP_Field + "=" + LDAP_Value + "))";
            var LDAPResponses = new List<LDAP_Search_Model>
            { // this line is highlighted as incorrect
                foreach (SearchResult sresult in deSearch.FindAll())
                {
                    new LDAP_Search_Model
                    {
                        fName = sresult.Properties["givenName"][0].ToString(),
                        sName = sresult.Properties["sn"][0].ToString(),
                        fullName = sresult.Properties["fullname"][0].ToString(),
                        OUC = sresult.Properties["PersonOUC"][0].ToString(),
                        email = sresult.Properties["mail"][0].ToString(),
                        UIN = sresult.Properties["cn"][0].ToString()
                    };
                }
            }; // this line is also highlighted as incorrect

        }
    }

    public class LDAP_Search_Model
    {
        public string UIN { get; set; }
        public string fName { get; set; }
        public string sName { get; set; }
        public string fullName { get; set; }
        public string OUC { get; set; }
        public string email { get; set; }
    }


}

以下代码可能会解决问题。

var LDAPResponses = new List<LDAP_Search_Model>();
foreach (SearchResult sresult in deSearch.FindAll())
{
   LDAPResponses.Add(new LDAP_Search_Model
   {
       //...
   });
};