如何从控制器获取User.Identity.Name?

时间:2009-10-01 20:25:45

标签: c# .net asp.net asp.net-mvc

我希望在我的所有视图中都有一些viewData信息,所以我正在学习本教程

http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx

所以我创建了自己的applicationController,但我需要从用户那里获取UserName。

然而,当我在构造函数中执行“HttpContext.User.Identity.Name”时,它始终为null。我不知道为什么会这样。

由于

好的基础就是诀窍。

  protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
        Guid userId = coursesS.GetUserId(HttpContext.User.Identity.Name);
    }

所以这似乎有效。现在唯一的事情似乎是经历了两次。就像我登录一样,似乎两次这样做。我猜是因为这就像把代码放在每个动作中一样。当我在我的网站上加载所有这些局部视图时,通过在我的控制器中调用它来实现这一点。

我应该缓存它,但我不确定如何。

5 个答案:

答案 0 :(得分:7)

HttpContext.Current.User.Identity.Name  

请注意您的通话中缺少 .Current

答案 1 :(得分:4)

尝试在ApplicationController的Initialize方法中初始化东西,HttpContext在构造函数中是不可用的。确保调用base.Initialize()或者你可以得到一些有趣的结果。

答案 2 :(得分:2)

您要访问的哪个特定属性为null?在检查Name属性之前,您可能想要检查User.Identity.IsAuthenticated == true。还要确保已启用表单身份验证,并且您确实已首先登录该站点。

答案 3 :(得分:0)

使用

Page.User.Identity.Name

答案 4 :(得分:0)

您在控制器中,请使用以下内容:

ControllerContext.HttpContext.Current.User.Identity.Name