0

イントラネットの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。したがって、この方法では、同じ Active Directory ユーザーを表す異なる文字列が得られます。割り当てまたは取得する方法に関係なく、すべてのユーザー名を標準にする方法はありますか?

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 に答える