Archiv der Kategorie: MVC

MVC – Show User’s Fullname

  1. Add Reference to „System.Directory.AccountManagement“
  2. Set „Copy Local“ to True
  3. Add following XML Snippet to „Web.Config“
    <system.web>
    <compilation debug=“true“ targetFramework=“4.5.2″ >
    <assemblies>
    <add assembly=“System.DirectoryServices, Version=4.0.0.0,Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A“ />
    </assemblies>
    </compilation>
  4. Add Folder „App_Code“ to your Project
  5. Add a new Item „Helper – cshtml“ inside this Folder
    @using System.DirectoryServices.AccountManagement
    
    @helper UserFullName()
    {
        using (var context = new PrincipalContext(ContextType.Domain))
        {
            var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
            if (principal != null)
            {
                var fullName = string.Format("{0} {1}", principal.GivenName, principal.Surname);
                @fullName
            }
        }
    }
  6. Change „Views/Shared/_Layout.cshtml“
    From
    Hello, @User.Identity.Name!
    To
    Hello, @UserNameHelper.UserFullName()!

UnitTest – How to Mock „User.Identity.GetUserId()“

ILSpy shows for GetUserId():

Public static string GetUserId(this IIdentity identity)
{
if (identity == null)
{
throw new ArgumentNullException(„identity“);
}
ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;
if (claimsIdentity != null)
{
return claimsIdentity.FindFirstValue(http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier);
}
return null;
}

So you need to mock the Extension Method „GetUserId()“ a claim based User-Moq-Object:

var identity = new GenericIdentity(„dominik.ernst@pentasys.de“);
identity.AddClaim(new Claim(„http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier“, „1“));
var principal = new GenericPrincipal(identity, new[] { „user“ });
context.Setup(s => s.User).Returns(principal);

var controller = new YOURController();
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);