Por que estou recebendo um NullReferenceException de Membership.GetCurrentUserName?
-
20-08-2019 - |
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
...
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.