У меня есть этот код, который работает очень хорошо, когда я хочу искать ТОЛЬКО по фамилии пользователя
public static string GetPhoneFromAD()
{
try
{
DirectoryEntry entryDomain = new DirectoryEntry("LDAP://" + domain);
DirectorySearcher ds = new DirectorySearcher(entryDomain);
string currentContextIdentity = System.Web.HttpContext.Current.User.Identity.Name;
string lastName = currentContextIdentity.Split(' ')[currentContextIdentity.Split(' ').Length - 1];
ds.Filter = "(sn = " + lastName + ")";
SearchResult sr = ds.FindOne();
string telephoneNumber = sr.Properties["telephoneNumber"][0].ToString();
return FormatPhone(telephoneNumber);
}
catch (Exception exception)
{
drmsda.InsertErrorlog("manage.aspx.cs", "Error in an attempt to get the phone number", exception.Source, exception.Message + " " + exception.StackTrace, "");
drmsda.sendErrorEmail("Error: SetPhone generated email", exception.Message);
return string.Empty;
}
}
Однако, если фамилия пользователя распространена, например, Смит, я не буду вводить правильную запись. Таким образом, я хотел бы добавить еще один критерий, например, имя. Однако запрос, который я придумал, не работает. Я пробовал следующее
ds.Filter = "(givenName = " + firstName + "&sn = " + lastName + ")";
Но это не работает, может кто-нибудь помочь?
заранее спасибо
Синтаксис фильтра LDAP немного отличается от этого; вы хотите:
(&(givenName=joe)(sn=bloggs))
См. здесь для многих примеров.
Это хороший справочник, который поможет вам создавать запросы LDAP: Active Directory: синтаксические фильтры LDAP