2017-07-10 8 views
0

asp.NET MVC5 Webサイトを使用してActive Directory内のユーザーを調査しています。私は無効な検索を行うと(。たとえば、「"éééézztaaz」)、ArgumentExceptionが投げ続けたが、私はそれを理解していないここで検索する私の方法です。Active Directoryの検索では、無効な名前の例外がスローされます。

public List<ADProperties> SearchUserByName(string name) 
{ 
    //ADProperties is a POCO to store values retrieved 
    try 
    { 

     List<ADProperties> theListIWant = new List<ADProperties>(); 
     //createDirectoryEntry() is a method to establish a connection to Active Directory 
     DirectoryEntry ldapConnection = createDirectoryEntry(); 
     DirectorySearcher search = new DirectorySearcher(ldapConnection); 

     //Search filter to find users 
     search.Filter = "(&(objectClass=user)(anr=" + name + "))"; 

     ///Properties to load 
     search.PropertiesToLoad.Add("objectSID"); 
     search.PropertiesToLoad.Add("displayName"); 
     search.PropertiesToLoad.Add("distinguishedName"); 
     resultCollection = search.FindAll(); 

     //ArgumentException at if statement 
     //I put this to AVOID exceptions, then in my controller, if value is null 
     //I return a different view 
     if (resultCollection==null ||resultCollection.Count==0) 
     { 
      return null; 
     } 

    } 
    else 
    { //Do stuff and return 
      return theListIWant; 
    }catch(ActiveDirectoryOperationException e) 
    { 
     Console.WriteLine("Active Directory Operation Exception caught: " + e.ToString()); 
    } 
    return null; 
} 

正確な例外がある:

検索フィルタ(&(objectClassの=ユーザー)(ANR =))(フランス語からの翻訳)

有効ではありません

だから私は、「ドンそれを得る。私は例外をスローするのを避けるために条件を追加しましたが、明らかにそれは助けになりません。

答えて

1

私が変えることをお勧め:

if (resultCollection==null ||resultCollection.Count==0) 
{ 
    return null; 
} 

へ:

try 
{ 
    if (resultCollection == null || resultCollection.Count == 0) 
    { 
     return null; 
    } 
} 
catch (ArgumentException) 
{ 
    return null; 
} 

このArgumentExceptionがスローされた場合、それはresultCollectionがnullであるかのように同じように扱われることを保証します。

+0

ええ、例外の全体のポイント、感謝! –

関連する問題