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

问题描述:

我想有在我所有的观点一些可视数据信息,所以我下面这个教程如何从控制器获取User.Identity.Name?

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

所以我做了我自己的ApplicationController,但我需要得到来自用户的用户名。

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

谢谢

好吧,基地的事情做到了。

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

这样似乎工作。现在唯一的事情似乎是经历了两次。就像我登录,它似乎做了两次。我猜测,因为这就好像把代码放在每一个动作中一样。当我通过在我的控制器中调用它们来加载所有这些局部视图时,它会执行此操作。

这么多我应该缓存它,但我不知道如何。

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

+1

我在哪里叫这个base.Initialze()?我不知道在哪里坚持它 – chobo2 2009-10-01 20:36:26

使用

Page.User.Identity.Name 
+0

为什么选择投票?这个对我有用?尽管如果这意味着我正在学习新的东西,我很乐意接受downvote ... – David 2009-10-01 20:33:18

+0

不知道为什么有人投票你做了。我试过了,并且出现此错误:错误非静态字段,方法或属性'System.Web.UI.Page.User.get'需要对象引用 – chobo2 2009-10-01 20:34:44

+0

他不在页面上。他正在创建一个自定义控制器。 – 2009-10-01 20:36:16

你在一个控制器,以便使用以下命令:

ControllerContext.HttpContext.Current.User.Identity.Name 
+0

当我尝试在抽象基本控制器中执行此操作时发生此错误。 错误对于非静态字段,方法或属性'System.Web.Mvc.ControllerContext.HttpContext.get' – chobo2 2009-10-01 20:33:24

+0

需要对象引用请参阅上面的Wyatt的注释。确保你调用base.Initialize()。 – 2009-10-01 20:35:40

+0

我在哪里坚持它的构造? – chobo2 2009-10-01 20:39:05

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

+0

好点。任何这些问题肯定会导致所述的错误。 – David 2009-10-01 20:36:18

+0

用户为空。这是什么是空的 – chobo2 2009-10-01 20:37:15

+0

哦,你是我登录。如果我拿出那条线,并尝试登录,我去授权页面。 – chobo2 2009-10-01 20:38:26

HttpContext.Current.User.Identity.Name 

注意.Current我们从您的通话丢失。

+0

嗯我可能需要导入的东西,因为我得到这个: 错误'System.Web.HttpContextBase'不包含'当前'的定义和没有扩展方法'当前'接受类型'系统的第一个参数.Web.HttpContextBase'可以找到(你是否缺少使用指令或程序集引用?) – chobo2 2009-10-01 20:35:45