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
{
//...
});
};
我正在构建一个应用程序,我需要为 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
{
//...
});
};