【问题标题】:Does anyone know a good practice to use when developing for the system.directory services class?有谁知道在开发 system.directory 服务类时使用的好习惯?
【发布时间】:2011-01-31 20:16:17
【问题描述】:

我稍后会尝试使用System.DirectoryServices 创建数据访问。我想使用 MVC 2 框架,并且我的所有视图大部分都是强类型的。有谁知道这个的好方法?

例如我开始创建一个组实体:

public class Group
{
    public string DistinguishedName { get; set; }
    public string GroupName { get; set; }
}

还有一个抽象接口:

public interface IGroupRepository
{
    List<Group> Groups { get; }
}

我对使用 system.directory 服务开发 GroupRepository 感到困惑。连接到 SQL 数据库很容易,到处都有示例,但我无法找到将 System.directory 服务与使用 MVC 的类结合使用的示例。有没有人试图做这样的事情?任何伟大的将是

【问题讨论】:

  • 顺便说一句,关于您的存储库,LINQ(或至少 lambdas)是您的朋友。而不是公开一个列表,公开一个Function Get(ByVal Query As System.Linq.Expressions.Expression(Of System.Func(Of T, Boolean))) As IQueryable(Of T)(请原谅VB)然后你可以调用Repository.Get(Function(x) x.Name = "GroupName")

标签: asp.net asp.net-mvc-2 active-directory adsi directoryservices


【解决方案1】:

如果您使用的是 .NET 3.5(并且如果您使用 MVC 2,则很有可能),您应该查看新的 System.DirectoryServices.AccountManagement 命名空间,它为您带来了许多强大的 .NET 类和类型您定期处理的目录对象 - 无需重新发明轮子(再次!)。

查看 MSDN 杂志中有关如何使用此 S.DS.AM 命名空间的这篇精彩文章:

Managing Directory Security Principals in the .NET Framework 3.5

更新:出于我不完全理解的原因,使用 UserPrincipal 作为 ASP.NET MVC 视图模型的简单方法不起作用 - 似乎 ASP .NET MVC 无法“找到”该对象的任何属性。

所以方法必须是这样的:

  • 从 Active Directory 中获取您的 UserPrincipal(或 DirectoryEntry
  • 定义一个单独的ViewModel - 这只是一个包含名字、姓氏等属性的类
  • 您可以自己填充该 ViewModel 类,也可以获取一些帮助,例如 AutoMapper,以便更轻松地从 UserPrincipal (DirectoryEntry) 映射到您的 ViewModel
  • 然后在标准 ASP.NET MVC 视图中显示(或编辑)您的 ViewModel 类
  • 通过将任何更改从 ViewModel 传输回“正确”对象并持久化该对象来处理任何可能的更新

这比我希望的要复杂一些 - 但老实说,我不知道你还能如何做到这一点。

【讨论】:

  • AccountManagement 命名空间看起来非常不错。我想我对将它与 MVC 框架集成感到困惑。例如,我的模型会是什么样子,以及如何使用这个命名空间填充数据?如果有人能提供一个简短但有用的例子,那就太好了。我无法从这里开始。
  • 例如,假设您要更新用户。您有一个视图,其中显示一个用于名字的文本框和一个用于姓氏的文本框。使用 mvc,如何使用 Accountmanagement 框架更新这样的内容?
  • @marc_s 看我之前的评论
  • @Jim:我今天尝试了一些东西,但我被这样一个事实难住了,ASP.NET MVC 似乎无法为UserPrincipal 生成一个像样的视图——不管出于什么原因,这让我无法理解......我将不得不对那个样本进行更多工作 - 我会及时通知你。
  • @marc_s 我一直在想,如果你能提供一个使用 system.directoryservices 命名空间的例子就足够了。有任何想法吗?有人吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 2020-06-04
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多