0

我正在开发一个 Intranet asp.net mvc web 应用程序。而且我从不同的类中获得了不同的用户名格式。例如,在 Create Post 操作方法中,我正在获取当前登录用户的用户名,并将其分配给 CreatedBy 字段,如下所示:-

public ActionResult Create(Group group)
        {try
            {if (ModelState.IsValid) {
Group.CreatedBy = User.Identity.Name;
                    repository.InsertOrUpdateGroup(group);
                    repository.Save();
                    repository.InsertOrUpdateAudit(auditinfo);

User.Identity.Name 将类似于:-domainname\username

如果在另一种操作方法上,我想检索所有 Active Directory 用户名的列表,我使用以下内容:-

List<DomainContext> results = new List<DomainContext>();
using (var context = new PrincipalContext(ContextType.Domain, "WIN-SPDEV"))
using (var searcher = new PrincipalSearcher(new UserPrincipal(context))) {
var searchResults = searcher.FindAll();
foreach (Principal p in searchResults) {
DomainContext dc = new DomainContext();
dc.DisplayName = p.DisplayName;
dc.userGuid = p.UserPrincipalName;

然后 UserPrincipleName 将是user1@domainname.local而不是doaminname\username。因此,通过这种方式,我将拥有代表同一个活动目录用户的不同字符串。那么有没有办法让所有用户名成为标准,不管我分配或检索它们的方法是什么?

4

1 回答 1

1

没有以“域\用户”格式公开用户名的属性,因此您需要自己做,为此,SamAccountName 属性是要使用的属性。

 var username = "WIN-SPDEV\\" + p.SamAccountName;

编辑

澄清一下,这适用于来自 Active Directory 的搜索结果,因此这将统一用户名的显示方式。

您的代码将成为

List<DomainContext> results = new List<DomainContext>();
using (var context = new PrincipalContext(ContextType.Domain, "WIN-SPDEV"))
using (var searcher = new PrincipalSearcher(new UserPrincipal(context))) {
var searchResults = searcher.FindAll();
foreach (Principal p in searchResults) {
DomainContext dc = new DomainContext();
dc.DisplayName = p.DisplayName;
dc.userGuid = p.UserPrincipalName;
var username = "WIN-SPDEV\\" + p.SamAccountName;
于 2013-07-15T02:02:57.103 回答