Asp.net mvc MVC5 User.Identity.GetUserName()在控制器中为空

Asp.net mvc MVC5 User.Identity.GetUserName()在控制器中为空,asp.net-mvc,asp.net-mvc-5,identity,Asp.net Mvc,Asp.net Mvc 5,Identity,这是怎么回事?User.Identity.GetUserName()在视图中工作正常,例如在登录部分视图中。但是如果我在控制器中使用它,它会抛出一个空引用异常 我正在查看页面,用户名显示在标题中,然后如果我单击指向我尝试使用它的控制器的链接,我会得到一个空引用异常 我应该补充一点,如果我这样做,效果会很好: var httpContext = System.Web.HttpContext.Current; _userName = httpContext != nu

这是怎么回事?User.Identity.GetUserName()在视图中工作正常,例如在登录部分视图中。但是如果我在控制器中使用它,它会抛出一个空引用异常

我正在查看页面,用户名显示在标题中,然后如果我单击指向我尝试使用它的控制器的链接,我会得到一个空引用异常

我应该补充一点,如果我这样做,效果会很好:

        var httpContext = System.Web.HttpContext.Current;
        _userName = httpContext != null ? httpContext.User.Identity.Name : "Testing";

所以我主要是好奇。

用户对象暴露于控制器,因此您不需要通过
System.Web.HttpContext.Current
访问它

var myUserName = User.Identity.GetUserName();

你把调用
User.Identity.GetUserName()的代码放在哪里了?如果它在构造函数上,那么您将得到空引用异常——因为对象用户尚未在构造函数中初始化。

这是可行的

public static class GetUserName
{
    public static string Name(IPrincipal user)
    {
        return user==null? HttpContext.Current.User.Identity.Name:user.Identity.Name;
    }
}

还要确保你没有

<authentication mode="None" />


在你的Web.config中,就像我刚才做的那样。

这正是我所做的Brendan,它抛出了一个空引用异常。控制器是否标记为AllowAnonymous?如果同一控制器的视图工作正常,则可能存在其他问题。我也有同样的问题:(