扩展UserPrincipal
以利用其内置属性...当我们重载FindByIdentity()
方法时遇到问题。
在Microsoft的http://msdn.microsoft.com/en-us/library/bb384372%28VS.90%29.aspx示例中(为简洁起见,部分内容不包括在内):
[DirectoryRdnPrefix("CN")]
[DirectoryObjectClass("inetOrgPerson")]
public class InetOrgPerson : UserPrincipal {
// Implement the overloaded search method FindByIdentity
public static new InetOrgPerson FindByIdentity(PrincipalContext context,
string identityValue) {
return (InetOrgPerson)FindByIdentityWithType(context,
typeof(InetOrgPerson),
identityValue);
}
// Implement the overloaded search method FindByIdentity
public static new InetOrgPerson FindByIdentity(PrincipalContext context,
IdentityType identityType,
string identityValue) {
return (InetOrgPerson)FindByIdentityWithType(context,
typeof(InetOrgPerson),
identityType,
identityValue);
}
}
如果我从MSDN示例中获取确切的代码并将其粘贴到我的应用中,则它将无法正常工作。对
InetOrgPerson.FindByIdentity()
的调用返回null,如下所示:if (null == InetOrgPerson.FindByIdentity(principalContext, UserName)) {
throw new Exception("bah");
}
实际上,从
InetOrgPerson.FindByIdentity()
内部,对FindByIdentityWithType()
的调用返回null,如下所示:if (null == FindByIdentityWithType(context, typeof(InetOrgPerson), identityType, identityValue) {
throw new Exception("bah");
}
但是,调用:
FindByIdentityWithType(context, typeof(UserPrincipal), identityType, identityValue)
给我我想要的用户对象。除非我不能使用它,否则无法将其强制转换为我需要返回的
InetOrgPerson
对象。是什么赋予了?我希望微软自己的示例代码能够正常工作,但事实并非如此,因此,我试图基于该示例编写的代码自然也无法正常工作。有人做过这项工作吗?
提前致谢!
詹姆士
最佳答案
确保您要搜索的用户实际上属于inetOrgPerson
类。