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

C# 如何从控制器获取User.Identity.Name?,c#,.net,asp.net,asp.net-mvc,C#,.net,Asp.net,Asp.net Mvc,我想在我所有的视图中都有一些viewData信息,所以我将学习本教程 因此,我制作了自己的applicationController,但我需要从用户那里获取用户名 然而,当我在构造函数中执行这个“HttpContext.User.Identity.Name”时,它总是空的。我不知道为什么 谢谢 好吧,卑鄙的家伙成功了 protected override void Initialize(RequestContext requestContext) { base.In

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

因此,我制作了自己的applicationController,但我需要从用户那里获取用户名

然而,当我在构造函数中执行这个“HttpContext.User.Identity.Name”时,它总是空的。我不知道为什么

谢谢

好吧,卑鄙的家伙成功了

  protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
        Guid userId = coursesS.GetUserId(HttpContext.User.Identity.Name);
    }
所以这似乎奏效了。现在唯一的问题是它似乎经历了两次。就像我登录,它似乎做了这两次。我在猜测,因为这相当于将代码放入每个动作中。当我在我的控制器中调用这些部分视图,在我的站点上加载所有这些部分视图时,它会这样做

这么多我应该缓存它,但我不确定如何使用。

使用

Page.User.Identity.Name
使用


您处于控制器中,因此请使用以下命令:

ControllerContext.HttpContext.Current.User.Identity.Name

您处于控制器中,因此请使用以下命令:

ControllerContext.HttpContext.Current.User.Identity.Name

尝试在ApplicationController的Initialize方法中初始化内容,HttpContext在构造函数中不可用。确保调用base.Initialize(),否则会得到一些有趣的结果。

尝试在ApplicationController的Initialize方法中初始化内容,HttpContext在构造函数中不可用。确保调用base.Initialize(),否则您会得到一些有趣的结果。

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

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

HttpContext.Current.User.Identity.Name  
请注意通话中缺少的.Current



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

为什么投反对票?对我有用吗?虽然我很乐意接受否决票,如果这意味着我正在学习新的东西…不知道为什么有人投票支持你。我尝试了它,但得到了以下错误:错误3非静态字段、方法或属性“System.Web.UI.Page.User.get”需要对象引用他不在页面上。他正在创建一个自定义控制器。为什么要投反对票?对我有用吗?虽然我很乐意接受否决票,如果这意味着我正在学习新的东西…不知道为什么有人投票支持你。我尝试了它,但得到了以下错误:错误3非静态字段、方法或属性“System.Web.UI.Page.User.get”需要对象引用他不在页面上。他正在创建自定义控制器。当我尝试在抽象基控制器中执行此操作时,会出现此错误。错误2非静态字段、方法或属性'System.Web.Mvc.ControllerContext.HttpContext.get'需要对象引用。请参阅上面的Wyatt注释。确保调用base.Initialize()。我应该将它放在构造函数中的什么位置?它还需要一些参数,我不确定如何传入它需要的参数。当我尝试在抽象基控制器中执行此操作时,会出现此错误。错误2非静态字段、方法或属性'System.Web.Mvc.ControllerContext.HttpContext.get'需要对象引用。请参阅上面的Wyatt注释。确保调用base.Initialize()。我应该把它放在构造函数中的什么位置?它还需要一些参数,我不确定如何传入它想要的。嗯,我可能需要导入一些东西,因为我得到了以下信息:错误3'System.Web.HttpContextBase'不包含'Current'的定义,并且没有接受类型的第一个参数的扩展方法'Current'可以找到“System.Web.HttpContextBase”(是否缺少using指令或程序集引用?)嗯,我可能需要导入一些东西,因为我得到以下信息:错误3'System.Web.HttpContextBase'不包含'Current'的定义,并且找不到接受'System.Web.HttpContextBase'类型的第一个参数的扩展方法'Current'(是否缺少using指令或程序集引用?)这是一个好的观点。任何这些问题都会导致所描述的错误。用户为空。这就是nullOh和ya我登录的内容。如果我拿出那条线并尝试登录,我会进入授权页面。好的观点。任何这些问题都会导致所描述的错误。用户为空。这就是nullOh和ya我登录的内容。如果我取出该行并尝试登录,我将进入授权页面。我在哪里调用此base.initialize()?我不知道应该把它放在哪里我把它叫做base.initialize()?我不知道该把它放在哪里