2011-02-28 99 views
0

我遇到了針對我的AD格式化LDAP查詢的問題。看起來,'+'字符正在搞亂我的生活。LDAP查詢無效字符

下面的查詢對我的作品罰款:

//C# AD lookup 

DirectoryEntry group = new DirectoryEntry(
    "LDAP://mydomain/CN=group name that works,OU=Groups,DC=myDomain,DC=us"); 

但是當我試圖查找該有它的「+」字符組:

//C# AD Lookup failure with '+' in CN 

DirectoryEntry group = new DirectoryEntry(
    "LDAP://mydomain/CN=name+ thatFails,OU=Groups,DC=myDomain,DC=us"); 

我收到了「無效已經指定了dn語法'異常。

我已經通過了各種'特殊'字符例如'_'和'&'這些工作的一羣有效的組名。看起來'+'字符是什麼導致我的悲傷。如何正確地格式化我的CN以使我的查詢有效?

編輯

的建議,我躲過了 '+' 字符。這不幸沒有幫助。下面是我目前的LDAP格式:

LDAP://mydomain/cn=_bigGroup\+ management office,OU=Groups,DC=myDomain,DC=us 
+0

你在你的代碼中使用了雙反斜槓還是使用了字符串操作符?例如新的DirectoryEntry(「LDAP:// mydomain/cn = _bigGroup \\ +管理辦公室,OU =組,DC = myDomain,DC = us」)或新的DirectoryEntry(@「LDAP:// mydomain/cn = _bigGroup \ +管理辦公室,OU =組,DC = myDomain,DC =我「 我相信它需要是一個實際的反斜槓字符,而不是C#字符串中的轉義字符 – 2011-02-28 22:32:31

+0

請參閱下面的我更新的答案如果您將一個實際的反斜槓字符('\\')在它工作的轉義字符之前 – 2011-03-01 04:17:46

回答

3

顯然,你需要使用反斜線一些字符,請參閱列表herË

更新:

反斜線是實際可行的。我在本地ADAM實例中創建了一個新的用戶對象cn ='Escape + Test'(託管在端口9389上)。我用下面的代碼編寫了一個小型Windows Forms程序:

using (DirectoryEntry entry = new DirectoryEntry("LDAP://localhost:9389/CN=Escape\\+Test,OU=MyUsers Users,DC=TEST,DC=LOCAL", "test", "xxxx", AuthenticationTypes.None)) 
{ 
    MessageBox.Show(entry.Properties["cn"][0].ToString()); 
} 

當我運行它時,程序顯示「Escape + Test」。

注意雙反斜槓表示實際的反斜槓而不是轉義字符。我期望在完整的AD域上具有相同的行爲。

正如一個完整性檢查,我用另一個答案中提到的%2B代替了反斜槓,當我嘗試訪問條目的屬性時,出現了「服務器上沒有這樣的對象」錯誤。

+0

@EJP - 是的,它的工作原理您的建議不會。當我用%2B替換反斜槓時,當我嘗試訪問時,它會響應「服務器上沒有這樣的對象」該條目的屬性。 – 2011-03-01 04:14:06

-1

只有特定用戶可以連接到LDAP,因此我們需要指定可訪問LDAP的用戶組並在應用程序池中定義它們。 當我們創建一個新網站時,添加這個具有訪問權限的應用程序池, 除非你提供了一個正確的應用程序池,否則我們會得到這種類型的錯誤。