2012-02-15 91 views
2

我做了一個小Googling我來到翻過這一充滿希望的代碼身份驗證對ActiveDirectory的

System.DirectoryServices.AccountManagement.PrincipalContext pc = new System.DirectoryServices.AccountManagement.PrincipalContext(ContextType.Domain, "YOURDOMAIN") 
// validate the credentials 
bool validatedOnDomain = pc.ValidateCredentials(userName, tb.Text.ToString()); 

用戶名是初始化爲Windows的登錄名。這也是一個字符串 tb.Text.ToString()是被用於輸入密碼

更新後的代碼,它的工作文本框。感謝所有

MSDN說PrincipalContext可以用兩個參數

在using語句中使用
+0

嗯...你添加到'System.DirectoryServices.AccountManagement'集的引用,並適當使用'System.DirectoryServices.AccountManagement;'條款你的源代碼文件的頂部? 'PrincipalContext'類不應該來自'TestAD'命名空間,真的..... – 2012-02-15 15:27:27

+0

我忘了添加組件。謝謝!這清除了第二個錯誤,但產生了不尋常的錯誤。 – 2012-02-15 15:34:30

+0

錯誤#1似乎仍然表明你在你自己的'TestAD'命名空間中有一個'PrincipalContext'類 - 它可能與'System.DirectoryServices.AccountManagement'中的「真實」類沒有相同的構造函數。 – 2012-02-15 15:41:54

回答

5

試圖找出這個代碼..這是完美的在我的項目。

public bool ValidateUser(string varDomain, string varUserName, string varPwd) 
    { 
     Boolean isValidUser; 
     using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, varDomain)) 
     { 
      isValidUser = pc.ValidateCredentials(varUserName, varPwd); 
     } 
     return isValidUser; 

    } 
3

類型必須是隱式轉換爲「System.IDisposable的」

意味着你需要改變你的代碼於:

PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOURDOMAIN"); 

// validate the credentials 
bool validatedOnDomain = pc.ValidateCredentials(userName, tb.Text.ToString()); 

基本上它只是告訴你,你不能使用PrincipalContextusing聲明中,因爲PrincipalContext未實現名爲IDisposable的接口。

編輯 作爲marc_s指出以下時,PrincipalContext您使用不正確的。它似乎生活在你自己的名字空間中。你應該使用System.DirectoryServices.AccountManagement

+1

[其實 - 它確實實現了'IDisposable'](http://msdn.microsoft.com/zh-cn/library/system.directoryservices.accountmanagement.principalcontext.aspx) - 我在想他已經重新創建了'PrincipalContext'從他自己的代碼中的S.DS.AM命名空間('TestAD.PrincipalContext .....') – 2012-02-15 15:29:09

+1

@marc_s你對問題的分析看起來完全正確。 – 2012-02-15 15:32:57

+0

你是怎麼做到的?頂部有Using語句來導入我需要的類。 – 2012-02-15 15:38:25