我想创建一个新的操作方法,在调用它时将返回所有Active Directory用户名。 asp.net mvc应用程序和Active Directory位于同一个域中(当前位于同一个开发机器中)。
所以我定义了以下操作方法: -
public ViewResult Details()
{
var c = repository.GetUserDetails3();
return View("Details2",c); }
以及以下存储库方法: -
public DirectoryEntry GetUserDetails3()
{
DirectoryEntry de = new DirectoryEntry();
using (var context = new PrincipalContext(ContextType.Domain, "WIN-SPDEV.com"))
{
using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
{
foreach (var result in searcher.FindAll())
{
de = result.GetUnderlyingObject() as DirectoryEntry;
}
}
}
return de;
}
和以下模型类: -
public class DirectoryUser
{public Nullable<Guid> Guid { get; set; }
public string Name { get; set; }
public string Username { get; set; }
}}
在视图上我有: -
@model IEnumerable<TMS.Models.DirectoryUser>
@{
ViewBag.Title = "Details2";
}
<h2>Details2</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Guid)
</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Username)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Guid)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Username)
</td>
但是当我调用action方法时出现以下错误: -
参数字典包含非可空类型
的参数“id”的空条目传递到字典中的模型项是类型的 'System.DirectoryServices.DirectoryEntry',但是这本字典 需要类型的模型项 'System.Collections.Generic.IEnumerable`1 [TMS.Models.DirectoryUser]'。
答案 0 :(得分:1)
我不明白为什么要将新的PrincipalContext
与旧的DirectoryEntry
混合使用。没有任何意义.....
此外 - 您正在搜索所有用户,但最终,您只返回一个DirectoryEntry
- 为什么?!
如果您正在使用新的PrincipalContext
- 那么请使用UserPrincipal
- 它包含关于用户的简单易用的属性 - 比旧的更容易使用和使用{1}} stuf ....
DirectoryEntry
public List<UserPrincipal> GetAllUsersDetails()
{
using (var context = new PrincipalContext(ContextType.Domain, "WIN-SPDEV.com"))
using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
{
var searchResults = searcher.FindAll();
List<UserPrincipal> results = new List<UserPrincipal>();
foreach(Principal p in searchResults)
{
results.Add(p as UserPrincipal);
}
}
}
类具有非常好的属性,如UserPrincipal
(名字),GivenName
等等 - 易于使用,强类型的属性。使用它们!
阅读所有关于这些新类以及如何在这里使用它们的信息: