Reflector は、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;
}
一見したところ、最も可能性の高い説明は次のとおりです。
他のすべてのパスには、null のテストがあるようです。
したがって、HttpContext.User のタイプと内容をトレースすることをお勧めします。
HttpContext.Current.User は IPrincipal であり、私が知っている IPrincipal の具体的な実装のほとんどは null ID を許可していないため、HttpContext.User が null であることに賭けます。