2016-11-14 1 views
0

Je crée une application dans laquelle je dois créer une liste pour chaque instance de correspondance dans une requête LDAP.C# LDAP Remplissage d'une liste avec les détails d'une requête LDAP

Cela devrait fonctionner comme si ... si l'utilisateur recherche «Smith» pour le nom de famille (sn), alors toutes les personnes ayant le nom de famille «Smith» verront leurs détails renseignés dans la liste.

Je peux ensuite utiliser cette liste pour générer les détails d'une boîte de sélection que l'utilisateur peut choisir et par la suite, cela sera sauvegardé sous la forme qu'ils ont utilisée. J'essaye de rendre ceci réutilisable à travers beaucoup d'applications dans ma solution ainsi le champ de recherche et les valeurs à rechercher sont passés à cette action (probablement sera suffixed avec un joker) et alors la liste peuplée. La page qui s'appelle cette action peut sauvegarder tous les détails dont ils ont besoin de la recherche LDAP, que ce soit le prénom ou le cn, tout ce qui est requis.

Je n'arrive pas à trouver mon code correct, mon hypothèse serait qu'elle était similaire à une fonction dans JS mais Visual Studio met en évidence des parties de mon code incorrectes.

Voici mon code (je l'ai mis des commentaires à côté de pièces qui sont mises en évidence par le studio visuel incorrect)

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; } 
    } 


} 

Répondre

1

Les codes suivants pourraient résoudre le problème.

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