Pergunta

Eu apenas passou a usar msbuild pré-compilar o meu site e agora eu estou recebendo este erro estranho:

Eu tenho uma chamada para Membership.GetUser () que lança:

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

Solução

refletor mostra a implementação de 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;
}

À primeira vista, a explicação mais provável é que:

  • HttpContext.Current não é nulo, e

  • HttpContext.Current.User é nulo ou tem uma propriedade nula Identidade.

Todos os outros caminhos parecem ter um teste para nulo.

Então, eu sugiro que você rastrear o tipo e conteúdo de HttpContext.User.

HttpContext.Current.User é um IPrincipal, ea maioria das implementações concretas de IPrincipal que eu conheço não permitem uma identidade nula, então eu apostaria em HttpContext.User sendo nula.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top