2

我刚刚切换到使用 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
...
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 不为空,并且

  • HttpContext.Current.User 为 null 或具有 null Identity 属性。

所有其他路径似乎都对 null 进行了测试。

所以我建议你跟踪HttpContext.User的类型和内容。

HttpContext.Current.User 是一个 IPrincipal,并且我所知道的 IPrincipal 的大多数具体实现都不允许空标识,所以我打赌 HttpContext.User 为空。

于 2009-03-19T17:08:17.610 回答