redwarrior’s diary

C#, ASP.NET, WEB, G*などの雑多な情報

ASP.NET MVC でユーザの氏名(!=アカウント名)を表示する(Windows認証を使用)

ASP.NET MVCWindows認証を使用して、ログインアカウント名(ドメイン名\アカウント名)からユーザーの氏名(フル・ネーム:Full Name)を取得して画面に表示する方法を調べたら、以下のサイトに書いてあった。

stackoverflow.com

上記サイトが見れなくなった時のために、ソースコードを載せておく。

using (var context = new PrincipalContext(ContextType.Domain))
{
    var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
    var firstName = principal.GivenName;
    var lastName = principal.Surname;
}

PrincipalContextクラス、UserPrincipalクラスを使用してアカウント名から、ユーザーの氏名を取得している。

実際に使ってみた注意点としては

  • アセンブリ参照の追加が必要

    Visual Studio上で[参照マネージャー]画面の[アセンブリ] > [フレームワーク]から、System.DirectoryServices.AccountManagementをチェックする。

  • DLLの実行環境へのコピーを設定しておくと良い

    ソリューションエクスプローラーで参照の配下にある System.DirectoryServices.AccountManagement を選択して、プロパティウィンドウの[ローカルにコピー]を True に設定すれば、プロジェクト直下ある Web.config の書き換えが不要になる。
    (設定しない場合は、Web.config を書き換える必要がある)

  • Viewsディレクトリの下にある Web.config で namespace の設定をすれば、cshtml で使用する場合に @using が不要になる。

  • _Layout.cshtml 等のレイアウトに設定することが多いと思うが、毎回呼び出される個所なので、負荷がかからないように対策(キャッシュ等)を行う。