Почему я получаю исключение NullReferenceException от Membership.GetCurrentUserName? - PullRequest
2 голосов
/ 19 марта 2009

Я только что перешел на использование msbuild для предварительной компиляции моего сайта, и теперь я получаю странную ошибку:

У меня есть вызов Membership.GetUser (), который выдает:

[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.Security.Membership.GetCurrentUserName() +36
System.Web.Security.Membership.GetUser() +7
...

1 Ответ

3 голосов
/ 19 марта 2009

Отражатель показывает реализацию Membership.GetCurrentUserName:

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;
}

На первый взгляд наиболее вероятное объяснение таково:

  • HttpContext.Current не является нулевым, и

  • HttpContext.Current.User имеет значение NULL или имеет нулевое свойство Identity.

Кажется, что все другие пути имеют тест на ноль.

Поэтому я предлагаю вам проследить тип и содержимое HttpContext.User.

HttpContext.Current.User - это IPrincipal, и большинство известных ему реализаций IPrincipal, о которых я знаю, не допускают нулевую идентичность, поэтому я бы сделал ставку на то, что HttpContext.User будет нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...