2

msbuildを使用してWebサイトをプリコンパイルするように切り替えたところ、次の奇妙なエラーが発生しました。

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
...
4

1 に答える 1

3

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

一見したところ、最も可能性の高い説明は次のとおりです。

  • HttpContext.Current が null ではなく、かつ

  • HttpContext.Current.User が null であるか、null の Identity プロパティを持っています。

他のすべてのパスには、null のテストがあるようです。

したがって、HttpContext.User のタイプと内容をトレースすることをお勧めします。

HttpContext.Current.User は IPrincipal であり、私が知っている IPrincipal の具体的な実装のほとんどは null ID を許可していないため、HttpContext.User が null であることに賭けます。

于 2009-03-19T17:08:17.610 に答える