Thursday, April 14, 2011

Why am I getting a NullReferenceException from Membership.GetCurrentUserName ?

I've just switched to using msbuild to precompile my website and now I'm getting this strange error:

I have a call to Membership.GetUser() which throws:

[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.Security.Membership.GetCurrentUserName() +36
System.Web.Security.Membership.GetUser() +7
...
From stackoverflow
  • Reflector shows the implementation of Membership.GetCurrentUserName is:

    private static string GetCurrentUserName()
    {
        if (HostingEnvironment.IsHosted)
        {
            HttpContext current = HttpContext.Current;
            if (current != null)
            {
                return current.User.Identity.Name;
            }
        }
        IPrincipal currentPrincipal = Thread.CurrentPrincipal;
        if ((currentPrincipal != null) && (currentPrincipal.Identity != null))
        {
            return currentPrincipal.Identity.Name;
        }
        return string.Empty;
    }
    

    At first glance the most likely explanation is that:

    • HttpContext.Current is not null, and

    • HttpContext.Current.User is null or has a null Identity property.

    All other paths seem to have a test for null.

    So I suggest you trace the type and contents of HttpContext.User.

    HttpContext.Current.User is an IPrincipal, and most concrete implementations of IPrincipal that I know of don't allow a null identity, so I'd bet on HttpContext.User being null.

0 comments:

Post a Comment