2012-02-15 93 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